Я хочу загрузить файл в s3, но не ждать его, однако я получаю следующую ошибку.
Uncaught Ошибка: DelayedStream # maxDataSize из 2097152 байтов превышен. в FormData.CombinedStream._checkDataSize (node_modules / комбинированный поток / lib / комбинированный_поток. js: 166: 19) в Readable.EventEmitter.emit (домен. js: 476: 20) в Readable.source.emit (node_modules /delayed-stream/lib/delayed_stream.js:30:21) в Readable.read (_stream_readable. js: 520: 10) в ManagedUpload.fillStream (node_modules / aws -sdk / lib / s3 / managed_upload . js: 422: 25) в режиме чтения. (node_modules / aws -sdk / lib / s3 / managed_upload. js: 188: 44) в Readable.EventEmitter.emit (домен. js: 476: 20) в Readable.source.emit (node_modules / delayed -stream / lib / delayed_stream. js: 30: 21) в emitReadable_ (_stream_readable. js: 570: 12) в processTicksAndRejected (внутренний / process / task_queues. js: 77: 11)
Использование :
console.log(image)
this.storageModule.upload(`${requestId}-${type}.jpg`, image)
> Readable {
> _readableState: ReadableState {
> objectMode: false,
> highWaterMark: 16384,
> buffer: BufferList { head: null, tail: null, length: 0 },
> length: 0,
> pipes: null,
> pipesCount: 0,
> flowing: null,
> ended: false,
> endEmitted: false,
> reading: false,
> sync: true,
> needReadable: false,
> emittedReadable: false,
> readableListening: false,
> resumeScheduled: false,
> paused: true,
> emitClose: true,
> autoDestroy: false,
> destroyed: false,
> defaultEncoding: 'utf8',
> awaitDrain: 0,
> readingMore: false,
> decoder: null,
> encoding: null
> },
> readable: true,
> _read: [Function: read],
> _events: [Object: null prototype] {},
> _eventsCount: 0,
> _maxListeners: undefined
> }
StorageModule
import Config from "../../config/config";
import S3 from "aws-sdk/clients/s3";
class StorageModule {
public config: Config;
public s3: S3;
public bucket: string;
constructor() {
this.config = new Config();
const credentials: S3.ClientConfiguration = {
accessKeyId: this.config.aws.AWS_S3_ACCESS_KEY_ID,
secretAccessKey: this.config.aws.AWS_S3_SECRET_ACCESS_KEY,
region: this.config.aws.AWS_S3_REGION,
};
this.s3 = new S3(credentials);
this.bucket = "test-bucket-name";
}
}
public upload = (key, body) => {
const params = {
Bucket: this.bucket,
Key: key,
Body: body
}
return this.s3.upload(params).promise()
}
}
export default StorageModule;
Однако, когда я запускаю загрузку из теста, работает.
import StorageModule from "./storage.module";
import fs from "fs";
import { expect } from "chai";
describe("StorageModule", () => {
it("should upload file to s3", async () => {
const storageModule = new StorageModule();
const stream = await fs.createReadStream(process.cwd() + "/test/resources/" + "id/front.jpg");
console.log(stream);
const key = "test/productId/sessionId/requestId-front.jpg"
const response = await storageModule.upload(key, stream);
expect(response.Location).to.equal(`${base}/${key}`)
});
});
Это связано с читаемым потоком, поскольку изображение, которое я пытаюсь загрузить, точно такое же?