Próbuję użyć metody przesłać z s3 użyciu ReadableStream z modułu fs
.JavaScript AWS SDK S3 metoda przesyłania strumienia z ciała generowania pusty plik
documentation mówi, że ReadableStream może być stosowany w Body
param:
Body - (bufor, wpisywanych tablicy, Blob, String, ReadableStream) dane obiektu.
Również przesyłania opis sposób jest następujący:
Wysyła dowolnie wielkości bufora, blob, lub strumienia, programowalnych równoczesne manipulowanie częściami, gdy ładunek jest wystarczająco duży.
Również tutaj: Upload pdf generated to AWS S3 using nodejs aws sdk @shivendra mówi, że może używać ReadableStream i działa.
To jest mój kod:
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) })
Robi się to wyjście:
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' }
Problemem jest to, że mój plik generowany na S3 (Output.txt) ma 0 bajtów.
Ktoś wie, co robię źle?
Jeśli przekażę bufor na Body
, to działa.
Body: Buffer.alloc(8 * 1024 * 1024, 'something'),
Ale to nie jest to, co chcę robić. Chciałbym to zrobić za pomocą strumienia, aby wygenerować plik i potokować strumień do S3, tak długo jak go generuję.
Wielkie śledztwo, dobrze to wiedzieć. –