在打字稿天蓝色函数中使用 HTTP 表单数据

问题描述 投票:0回答:1

目前我正在开发一个用 typescript 编写的 azure 函数。

该函数应该能够处理通过 POST 请求接收的表单数据。在此请求中,将发送文件和文本。我怎样才能同时使用两者?

现在,我正在使用

parse-multipart
库,但它似乎只适用于文件。每次我发送文件字段和文本字段时,它都会返回错误。

我也尝试使用

formidable
库,但没有成功。它期望请求对象具有
on
方法,而来自 Azure 的 HttpRequest 则没有。

请求实例有一个名为 formData 的方法,它可以获取这两个值。但是,文件数据看起来像:

{ size: 3115398, type: 'image/jpeg',  name: 'imageName.jpg', lastModified: 1706633173379 }
(无缓冲区),所以我无法使用它。

有什么解决办法吗?

typescript azure-functions multipartform-data form-data
1个回答
0
投票

感谢@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)

© www.soinside.com 2019 - 2024. All rights reserved.