多部分,如何正确发送文件

时间:2019-07-31 18:03:45

标签: http post flutter multipartform-data

我正在尝试通过Flutter发送Multipart表单数据,但响应api无法获取图像文件。我创建了一个后端来调试我的电话,我得到了:

我的代码:

Map<String, String> fields = {
      "label":'-Ll7XfpsPLd_w5kz-D0m' 
    };
MultipartRequest request = MultipartRequest(
      'POST',
      Uri.parse(url),
    );
    request.fields.addAll(fields);
    request.files.add(
      MultipartFile.fromBytes(
        'image',
        imagem.readAsBytesSync(),
        contentType: MediaType('image', 'jpeg'),
      )
    );
    return request.send();

服务器答案:

received fields:

 { label: [ '-Ll7XfpsPLd_w5kz-D0m' ],
  image:
   [ '\M-o\M ... A LOT OF DATA]}

然后制作一个HTML页面以进行测试:

<form method="POST" enctype="multipart/form-data" action="http://172.20.10.2:5002/upload" >
    <input type="text" name="zava" value="Zava" /> <br />
    <input type="file" name="image" /> <br />
    <input type="submit" /> <br />
</form>

并收到服务器答复:

received fields:

 { zava: [ 'Zava' ] }

received files:

 { image:
   [ { fieldName: 'image',
       originalFilename: 'Grifo.png',
       path: '/tmp/0wvX_w8W5Mw_7flqIdK0b1xX.png',
       headers: [Object],
       size: 114862 } ] }

我的代码有什么问题?为什么de Multipart不将文件作为文件发送?

1 个答案:

答案 0 :(得分:0)

我发现,如果您传递filename的可选参数MultipartFile,则请求可以正常工作。

只需执行以下操作:

      MultipartFile.fromBytes(
        'image',
        imagem.readAsBytesSync(),
        contentType: MediaType('image', 'jpeg'),
        filename: 'dummy.jpg'
      )

我打开了一个关于不带文件名的请求的错误提示(如果必须修复或更改了文档)...