Tôi đang cố gắng sử dụng phương pháp upload từ s3 sử dụng một ReadableStream từ các module fs
.Javascript AWS SDK S3 phương pháp tải lên với dòng Body tạo tập tin rỗng
Các documentation nói rằng một ReadableStream có thể được sử dụng tại Body
param:
Body - (Buffer, Typed Array, Blob, String, ReadableStream) dữ liệu Object.
Ngoài ra upload mô tả phương pháp là:
cập nhật một cách tùy tiện có kích thước bộ đệm, blob, hoặc suối, sử dụng xử lý đồng thời thông minh của các bộ phận nếu tải trọng đủ lớn.
Ngoài ra, tại đây: Upload pdf generated to AWS S3 using nodejs aws sdk @shivendra cho biết anh ấy có thể sử dụng ReadableStream và hoạt động.
Đây là mã của tôi:
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) })
Nó nhận được kết quả này:
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' }
Vấn đề là tập tin của tôi được tạo ra tại S3 (output.txt) có 0 Bytes.
Ai đó biết tôi đang làm gì sai?
Nếu tôi vượt qua bộ đệm trên Body
thì nó hoạt động.
Body: Buffer.alloc(8 * 1024 * 1024, 'something'),
Nhưng đó không phải là điều tôi muốn làm. Tôi muốn làm điều này bằng cách sử dụng một dòng để tạo ra một tập tin và đường ống một dòng để S3 miễn là tôi tạo ra nó.
Điều tra tuyệt vời, tốt để biết điều đó. –