Superagent .attach()文件或缓冲区数据为空

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

我遇到了这个问题,superagent没有正确地将文件或缓冲区附加到请求中,我提到空的原因是由于表单数据看起来像:

------WebKitFormBoundaryy6T3XReWRFT1KfFm
Content-Disposition: form-data; name="media"


------WebKitFormBoundaryy6T3XReWRFT1KfFm--

没有关于该文件的任何信息,它出现空qazxsw poi

我正在使用的代码很简单:

media:

.post(`${API_ROOT}${url}`) .withCredentials() .attach('media', body.media, 'filename.jpg') 在哪里:

body.media

要么

asBuffer(file, callback) {
    const reader = new FileReader();
    reader.addEventListener('load', () => callback(reader.result));
    reader.readAsDataURL(file);
}
asBuffer(file, ((b) => {
    body.media = b;
}));

或者与body.media = new FormData(); body.media.append('file', inputFile, inputFileName); 一起

asBuffer

其中Buffer.from(body.media, 'base64'); 的类型为inputFile。当File不是attach类型时,我也玩过body.media并省略了文件名。

我不相信我的结果有问题,因为使用Buffer实际上将文件附加到请求formdata,我可以在后端服务器中看到它。只有.send(body.media)功能不能正常工作,我需要它,因为我还需要发送字段。

我此时发现的唯一解决方法是:

.attach()

我真的觉得得到一个巨大的网址只是为了能够发送文件和我的字段。我已经看到一些像这样的问题已经发布,但似乎都没有答案。

node.js reactjs express superagent
1个回答
1
投票

检查后

const mediaFile = body.media; delete body.media; .post(...) .withCredentials() .query(body) .send(mediaFile)

表明superagent有自己的附加文件的https://github.com/visionmedia/superagent/blob/master/lib/client.js#L571变量 - 意味着我自己的FormData的使用是多余的,因此导致嵌套导致空载荷。

因此,只需将FormData类型的inputFile传递给File即可解决问题。

此外,对于这些领域,我有十几个解决方案:

.attach()

在后端服务器中简单地:.field('fieldName', JSON.stringify(body))以JSON格式获取请求有效负载。

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