使用 Express 时,我无法使用 FunctionFramework 进行文件上传。
我创建了一个示例存储库:https://github.com/Boardtale/FunctionFrameworkAndUploadingFiles/blob/master/index.js.
我尝试过使用 Multer、Formidable、Busboy,甚至本地方法。当使用 FunctionFramework 时,所有这些都会失败,但当我直接调用 Express 并侦听端口时,它们工作得很好。
似乎幕后正在发生一些我无法弄清楚的事情。我也尝试过添加不同的正文解析器,但没有任何帮助。
这是我针对特定库得到的结果。
Multer:
req.file
未定义form.parse
req.on('end'
解析文件上传时出错:错误:意外的表单结尾 在 Multipart._final (W:\workspace\playground ode_modules usboy\lib ypes\multipart.js:588:17) 在预完成时(节点:内部/流/可写:914:14) 在完成可能(节点:内部/流/可写:928:5) 在 Writable.end(节点:内部/流/可写:843:5) 在 onend (节点:内部/流/可读:946:10) 在 process.processTicksAndRejections (node:internal/process/task_queues:77:11) 完成的异常 函数:错误[ERR_HTTP_HEADERS_SENT]:无法在它们之后设置标头 发送给客户
Ofc 文件以内容类型发送:
multipart/form-data; boundary=<calculated when request is sent>
正如 @samthecodingman 的类似线程中所提到的
Firebase Functions
是在 functions-framework-nodejs
包(或者相同代码的内部版本)之上构建的,它在代码运行之前解析主体。此行为记录在本文档中。
这表明当您尝试将其提供给
Busboy
时,请求的正文流已耗尽,这就是您看到“意外的表单结束”错误消息的原因。您必须使用框架添加到请求中的 rawBody
属性才能访问和执行原始请求内容。
您也可以参考这个stackoverflow线程