首页 > 解决方案 > 如何使用 hapi 测试文件上传?

问题描述

我的 hapi 路由中有这种有效负载格式,它只接受multipart/form-data数据,输出设置为stream

payload: {
        maxBytes: 1024,
        output: 'stream',
        parse: true,
        allow: 'multipart/form-data',
      }

我想测试那条路线,我的有效载荷是这样的:

const FD = new FormData();
    FD.append('field1', 'value');
    FD.append('field2', 'value');

hapi 注入方法如下所示:

    const res = await server.inject({
      method,
      url,
      headers: {
        ...
        'Content-Type': 'multipart/form-data; boundary=--SEPARATION--',
      },
      payload: FD,
    });

我正进入(状态

无效的多部分负载格式

我也尝试使用Steam对象设置流,但它不起作用。我也尝试发送一个File对象。

此时我只想向不会导致错误的路由发送一些东西。不必是 FormData。只要我可以添加一些自定义字段以进一步测试它,路由将接受的任何内容都可以。

提前致谢。

标签: node.jstestinghapi

解决方案


据我所知,FormDatanode.js 中不存在,所以我假设您正在使用form-data模块

在这种情况下,您需要分别请求form-data缓冲区和标头,如下所示:

const FormData = require('form-data');

const FD = new FormData();
FD.append('field1', 'value');
FD.append('field2', 'value');

const response = await server.inject({
    method,
    url,
    headers: {
        <your other headers>
        ...FD.getHeaders(),
    },
    payload: FD.getBuffer(),
});

如果要测试发送文件,还需要提供filename属性 toappend(…)以便服务器正确解码二进制数据:

const fileContent = <any Buffer>;
FD.append('form_file_property', fileContent, {filename: 'a testfile'});

推荐阅读