nodejs – 使用fs.createReadStream,requestjs,streaming和AWS S3 presigned url上传会引发错误
我的环境:Windows 8.1,NodeJS 0.10.0请求2.30.0
这是我基于Amazon SDK的示例和requestjs的文档尝试的
var params = {Bucket:'myprivateuniquebucket' ,Key:'mykey' ,Expires: 60}; var url = s3.getSignedUrl('putObject', params); fs.createReadStream('pic.png').pipe(request.put(url));
这是我得到的错误
events.js:72 throw er; // Unhandled 'error' event ^ Error: read ECONNRESET at errnoException (net.js:863:11) at TCP.onread (net.js:524:19)
然而,而不是使用fs.createReadStream当我使用下面的fs.readFile一切工作得很好
fs.readFile('pic.png', function (err, data) { request( { method: 'PUT' , uri: url , body: data } , function (error, response, body) { } ); });
请注意,我几乎逐字跟在https://github.com/mikeal/request这里。
我会很欣赏什么是不正确的指针,因为我想在多个地方使用stream。
这主要是亚马逊API的问题,而不是你的代码。 将file upload到Amazon需要设置Content-Length
标题。 在你的stream示例中,长度是未知的,所以Amazon正在丢弃连接。 在第二个示例中, request
知道缓冲区的长度,并为您设置Content-Length
。
如果你是stream媒体,因为文件是巨大的,并加载到内存很难,那么你将需要使用亚马逊的多部分上传API。 如果你是stream媒体,但文件很小,那么我可能坚持readFile
方法。
- 在node.js中依次运行多个asynchronous函数
- 从node.js中的JSON将s3桶策略转换为base64
- 使用NodeJS将多个file upload到AWS S3
- MalformedXML:您提供的XML格式不正确,或者没有针对我们发布的模式进行validation
- 如何使用KMS将S3encryption到nodejs中?
- 如何调整图像大小并使用nodejs中的multer上传到s3并使用easy-image npm模块?
- S3.getSignedUrl接受多个内容types
- 使用NodeJS将file upload到Amazon S3
- 直接上传到AWS S3:SignatureDoesNotMatch仅适用于IE