目前我正在开发一个用 typescript 编写的 azure 函数。
该函数应该能够处理通过 POST 请求接收的表单数据。在此请求中,将发送文件和文本。我怎样才能同时使用两者?
现在,我正在使用
parse-multipart
库,但它似乎只适用于文件。每次我发送文件字段和文本字段时,它都会返回错误。
我也尝试使用
formidable
库,但没有成功。它期望请求对象具有 on
方法,而来自 Azure 的 HttpRequest 则没有。
请求实例有一个名为 formData 的方法,它可以获取这两个值。但是,文件数据看起来像:
{ size: 3115398, type: 'image/jpeg', name: 'imageName.jpg', lastModified: 1706633173379 }
(无缓冲区),所以我无法使用它。
有什么解决办法吗?
感谢@anzharip。
这段代码对我有用。 在代码中我们使用
@anzp/azure-function-multipart
模块。
我的代码
HttpTrigger1/index.ts
:
import { AzureFunction, Context, HttpRequest } from "@azure/functions";
import parseMultipartFormData from "@anzp/azure-function-multipart";
const httpTrigger: AzureFunction = async function (
context: Context,
req: HttpRequest
): Promise<void> {
const { fields, files } = await parseMultipartFormData(req);
context.log("HTTP trigger function processed a request.");
const name = req.query.name || (req.body && req.body.name);
const fileContent = files.length > 0 ? Buffer.from(files[0].bufferFile).toString('utf-8') : null;
const responseMessage = {
fields,
files:[
{
...files[0],
fileContent,
},
],
};
context.res = {
body: responseMessage,
};
};
export default httpTrigger;
hello.txt
:
Hello, this is file data of hello.txt
OUTPUT
:
{
"fields": [
{
"name": "Name",
"value": "Vivek",
"nameTruncated": false,
"valueTruncated": false,
"encoding": "7bit",
"mimeType": "text/plain"
}
],
"files": [
{
"name": "Testfile",
"bufferFile": {
"type": "Buffer",
"data": [
72,
101,
108,
108,
111,
44,
32,
116,
104,
105,
115,
32,
105,
115,
32,
102,
105,
108,
101,
32,
100,
97,
116,
97,
32,
111,
102,
32,
104,
101,
108,
108,
111,
46,
116,
120,
116
]
},
"filename": "hello.txt",
"encoding": "7bit",
"mimeType": "text/plain",
"fileContent": "Hello, this is file data of hello.txt"
}
]
}
Functions:
HttpTrigger1: [GET,POST] http://localhost:7071/api/HttpTrigger1
For detailed output, run func with --verbose flag.
[2024-01-31T13:44:55.287Z] Host lock lease acquired by instance ID '000000000000000000000000AAE5F384'.
[2024-01-31T13:45:36.816Z] Executing 'Functions.HttpTrigger1' (Reason='This function was programmatically called via the host APIs.', Id=cbd178b7-09f8-4316-b22b-1f8fd5b5a3f0)
[2024-01-31T13:45:37.065Z] HTTP trigger function processed a request.
[2024-01-31T13:45:37.371Z] Executed 'Functions.HttpTrigger1' (Succeeded, Id=cbd178b7-09f8-4316-b22b-1f8fd5b5a3f0, Duration=648ms)