【发布时间】:2017-10-24 01:20:54
【问题描述】:
我正在尝试使用来自 s3 的方法 upload,使用模块 fs 中的 ReadableStream。
documentation 表示可以在 Bodyparam 处使用 ReadableStream:
Body — (Buffer, Typed Array, Blob, String, ReadableStream) 对象数据。
另外上传方法描述为:
上传任意大小的缓冲区、blob 或流,如果有效负载足够大,则使用部分的智能并发处理。
另外,在这里:Upload pdf generated to AWS S3 using nodejs aws sdk @shivendra 说他可以使用 ReadableStream 并且它可以工作。
这是我的代码:
const fs = require('fs')
const S3 = require('aws-sdk/clients/s3')
const s3 = new S3()
const send = async () => {
const rs = fs.createReadStream('/home/osman/Downloads/input.txt')
rs.on('open', () => {
console.log('OPEN')
})
rs.on('end', () => {
console.log('END')
})
rs.on('close', () => {
console.log('CLOSE')
})
rs.on('data', (chunk) => {
console.log('DATA: ', chunk)
})
console.log('START UPLOAD')
const response = await s3.upload({
Bucket: 'test-bucket',
Key: 'output.txt',
Body: rs,
}).promise()
console.log('response:')
console.log(response)
}
send().catch(err => { console.log(err) })
它得到这个输出:
START UPLOAD
OPEN
DATA: <Buffer 73 6f 6d 65 74 68 69 6e 67>
END
CLOSE
response:
{ ETag: '"d41d8cd98f00b204e9800998ecf8427e"',
Location: 'https://test-bucket.s3.amazonaws.com/output.txt',
key: 'output.txt',
Key: 'output.txt',
Bucket: 'test-bucket' }
问题是我在 S3 (output.txt) 生成的文件有 0 字节。
有人知道我做错了什么吗?
如果我在 Body 上传递一个缓冲区,它就可以工作。
Body: Buffer.alloc(8 * 1024 * 1024, 'something'),
但这不是我想做的。只要我生成它,我想使用流来生成文件并将流通过管道传输到 S3。
【问题讨论】:
标签: node.js amazon-s3 upload stream