Node.js上传xlsx文件到GCS后跨服务请求无响应如何解决?
问题核心原因
你发送FormData请求时错误配置了请求头,是唯一针对大体积Excel文件触发异常的核心诱因:
你在第二个服务的请求配置中手动设置了
Content-Type: application/json,但formData格式的请求必须使用multipart/form-data类型的请求头。小体积的jpg/png文件传输时,服务端可能因为内容长度短出现解析容错,但体积更大的xlsx文件会直接触发解析逻辑失败,导致服务端无响应返回。
可落地的解决方案
按优先级依次调整即可:
- 第一步:删除请求配置中手动设置的
Content-Type头。你使用的request库会自动识别formData参数,自动生成带boundary标识的正确multipart/form-data请求头,无需手动声明。 - 第二步:补充请求错误逻辑排查。你当前的回调完全没有处理
error参数,请求如果出现超时、连接中断、权限错误等问题时无法感知,新增错误打印即可快速定位底层问题。 - 第三步:调整服务端的请求体积限制。如果Excel文件体积远大于之前测试的图片,检查接收端服务的文件上传大小限制:如果使用express + multer处理FormData,默认单文件大小限制为10MB,超出后会直接中断请求无返回,按需调整
limits.fileSize配置即可。 - 第四步:替换已停止维护的
request库。request库2020年已正式停止维护,建议切换为axios、node-fetch等目前活跃维护的请求库,避免老旧版本的未知兼容bug。
调整后的参考代码
getResponse(source, filename, destination, bucket_name, json_url, callback) { var formData = { file: fs.createReadStream(source), filename: filename, json_url: json_url, destination: destination, bucket_name: bname } var options = { 'method': 'POST', 'url': endpoint_of_another_server, 'headers': { 'api_key': key // 移除手动设置的Content-Type,交由request自动生成 }, formData: formData, timeout: 30000 // 新增30秒超时避免请求无限挂起 } console.log("I AM RUNNING TILL HERE") request(options, function (error, response) { // 新增错误处理逻辑 if (error) { console.error("请求异常:", error) return callback(JSON.stringify({success: 0, err: error.message})) } console.log("WE ARE GETTING SOME RESPONSE " + response); return callback(response.body); }) }
内容的提问来源于stack exchange,提问作者Rakesh Saini
相关产品推荐
相关产品推荐

