javascript - Amazon S3 - Proslijedi niz za učitavanje više nizova na S3 kantu u nodejs
Recimo da imam jednostavnu petlju ovako:
for (const i=0;i<3;i++) {
to(`This counter is ${i}`)
}
Želim imati na kraju u svojoj datoteci:
- Ovaj brojač je 0
- Ovaj brojač je 1
- Ovaj brojač je 2
Pokušao sam to učiniti tako da napravim ovo:
export class S3Output extends Output {
#stream: Readable | null = null
async to(s: string): Promise<void> {
const params = {
Bucket: config.aws.bucketName,
Body: this.#stream,
Key: 'test.json'
}
this.#stream?.pipe(process.stdout)
this.#stream?.push(s)
await S3.upload(params).promise()
return
}
init(): void {
this.#stream = new Readable()
this.#stream._read = function () {};
}
finish(): void {
this.#stream?.push(null)
return
}
}
Moja init funkcija se poziva na početku petlje, moja to funkcija se poziva svaki put kad želim dodati niz u datoteku, a finish funkcija na kraju petlje. Ovaj kod ne dodaje nikakve podatke, zašto?
Odgovor #1
Zapravo sam otkrio u čemu je bio problem. Trebao sam poslati stream kad je gotov, a ne dok sam ga radio. Također, nema potrebe za pipe.
export class S3Output extends Output {
#stream: Readable | null = null
async to(s: string): Promise<void> {
this.#stream?.push(s)
return
}
init(): void {
this.#stream = new Readable()
this.#stream._read = function () {}
}
async finish(): Promise<void> {
this.#stream?.push(null)
const params = {
Bucket: config.aws.bucketName,
Body: this.#stream,
Key: 'test.json'
}
await S3.upload(params).promise()
return
}
}
