尝试使用Node请求将文件PUT到URL时出错



我正在尝试将一个文件放入S3预签名的URL。使用bash/cURL这样做效果很好,但使用Node我会收到以下错误:

Error: write EPIPE
at WriteWrap.onWriteComplete [as oncomplete] (node:internal/stream_base_commons:94:16) {
errno: -32,
code: 'EPIPE',
syscall: 'write'
}

这是代码

const fs = require('fs');
const request = require('request');
stream = fs.createReadStream('/tmp/file');
r = request.put('https://s3.eu-west-2.amazonaws.com/bucketname/path?X-Amz-Content-Sha256=....&...');
stream.pipe(r).on('error', function(err) {
console.log(err);
});

EPIPE表示写入请求失败,因为另一端关闭了连接。看起来可能需要一些额外的设置才能使用amazons3。我知道curl本机支持多部分/表单数据。您可以使用此库创建可读的multipart/form-data流。

https://nicedoc.io/form-data/form-data

  • 或者您可以使用第三方库发送数据

https://www.npmjs.com/package/s3-upload-stream

https://www.npmjs.com/package/streaming-s3

最新更新