Je suis en train d'utiliser la méthode télécharger de s3 utilisant un ReadableStream du module fs
.méthode de téléchargement Javascript AWS SDK S3 avec flux de corps générant fichier vide
Le documentation dit qu'un ReadableStream peut être utilisé à Body
param:
corps - (Tampon, Array tapées, Blob, String, ReadableStream) les données de l'objet.
également la description du procédé de mise en ligne est:
Uploads un tampon de taille arbitraire, goutte, ou le flux, en utilisant la manipulation simultanée de parties intelligente si la charge utile est suffisamment grande.
En outre, ici: Upload pdf generated to AWS S3 using nodejs aws sdk le @shivendra dit qu'il peut utiliser un ReadableStream et cela fonctionne.
Ceci est mon code:
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) })
Il devient cette sortie:
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' }
Le problème est que mon fichier généré à S3 (sortie.txt) a 0 Octets. Quelqu'un sait ce que je fais mal?
Si je passe un tampon sur Body
cela fonctionne.
Body: Buffer.alloc(8 * 1024 * 1024, 'something'),
Mais ce n'est pas ce que je veux faire. Je voudrais le faire en utilisant un flux pour générer un fichier et diriger un flux vers S3 tant que je le génère.
Grande enquête, bon à savoir. –