如何使用 node.js 运行时访问 Azure Function App 函数中的 multipart/form-data

Posted

技术标签:

【中文标题】如何使用 node.js 运行时访问 Azure Function App 函数中的 multipart/form-data【英文标题】:How to access multipart/form-data in Azure Function App function with node.js runtime 【发布时间】:2021-06-03 17:56:12 【问题描述】:

我有一个带有 HTTP 触发器的 Azure Function App (Node.js) 函数设置,我正在尝试访问 HTTP 请求文件数据,但我无法访问。有一个 html 表单向我的本地计算机上的函数的 URL 发送 POST 请求。这是表格:

<form
      type="multipart/form-data"
      action="http://localhost:7071/api/HttpTrigger1"
      method="POST"
    >
      <input type="file" name="file-one" />
      <button>Submit</button>
</form>

尽我所能,我的 HTTP 触发器函数的“req”参数的 req.body 和 req.rawBody 属性似乎只包含一个带有文件名的字符串,而不是任何文件数据。我无法在传递给 HTTP 触发器函数的 req 对象中找到任何文件数据。在这里和其他地方阅读后,我真的没有看到答案,到目前为止我尝试过的一切都没有奏效。没有在 JSON 正文中传递 base64 文件数据,有没有办法只从 HTTP 请求访问 multipart/form-data 文件数据?

我在互联网上找到了解决这种情况的指南,但他们的代码表明 req.rawBody 属性将包含似乎不正确的未解析数据。如何在 Function App 函数中访问随 HTTP 请求发送的文件数据?

【问题讨论】:

【参考方案1】:

表单必须将“enctype”设置为“multipart/form-data”而不是“type”。

【讨论】:

【参考方案2】:

您需要确定传入的请求是多部分请求,例如 - req.headers["content-type"],或者您是否有其他方法。

一旦您确定请求是多部分/表单数据,您就可以使用 parse-multipart-data 或 Form-data-packages 等库来解析原始多部分负载。

【讨论】:

感谢您的信息!如果需要,我会设置标题。事实证明,当它应该是“enctype = ...”时,我声明了 type="multipart/form-data"。哇!!

以上是关于如何使用 node.js 运行时访问 Azure Function App 函数中的 multipart/form-data的主要内容,如果未能解决你的问题,请参考以下文章

Azure node.js API App - 在运行时失败(可能是node.js版本问题?)

Node.js 项目的 Azure Web 服务部署失败

带有 graphql cli 的 Azure node.js 相对路径

反序列化从 node.js (azure sdk) 发送的 Azure ServiceBus 队列消息时出错

Azure 存储 - 如何通过 Node.js 还原目录?

Azure Web App-当您选择Runtime stack作为Node.js时,为什么只让您选择Linux作为操作系统?