mirror of
https://github.com/dadosfera/maestro.git
synced 2026-11-14 05:39:09 +00:00
FEAT: send images in stream
This commit is contained in:
@@ -74,7 +74,7 @@ export class ThemeController {
|
||||
logoBlack
|
||||
});
|
||||
this.logger.info('saveCustomertheme' + JSON.stringify(theme));
|
||||
return { theme: theme };
|
||||
return theme;
|
||||
} catch (err) {
|
||||
if (err.details === ErrorCodes.CUSTOMER.NOT_FOUND) {
|
||||
this.logger.error('Error - saveCustomertheme - Expect CUSTOMER.NOT_FOUND');
|
||||
|
||||
@@ -25,7 +25,6 @@ type Files = {
|
||||
logoBlack: Express.Multer.File,
|
||||
}
|
||||
|
||||
// This function will accept any string, which may result in a bug.
|
||||
@Injectable()
|
||||
export class ThemeService implements OnModuleInit {
|
||||
private themeService: ThemeProtoService;
|
||||
@@ -95,16 +94,11 @@ export class ThemeService implements OnModuleInit {
|
||||
}
|
||||
|
||||
private async sendFile(file: Express.Multer.File, stream$: ReplaySubject<ThemeRequest>) {
|
||||
const bufferStream = new Readable({
|
||||
highWaterMark: 1024 * 1024, // 1 MB por chunk
|
||||
read() {}
|
||||
});
|
||||
bufferStream.push(file.buffer);
|
||||
bufferStream.push(null);
|
||||
const chunkSize = 4 * 1024 * 1024;
|
||||
const bufferStream = new CustomBufferStream(file.buffer, chunkSize);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
bufferStream.on('data', (chunk) => {
|
||||
console.log('enviando chunk', file.fieldname)
|
||||
const mimetype = file.mimetype.split('/')[1]; // example image/jpeg
|
||||
const filename = file.fieldname.concat(".", mimetype);
|
||||
stream$.next({
|
||||
@@ -119,15 +113,39 @@ export class ThemeService implements OnModuleInit {
|
||||
});
|
||||
|
||||
bufferStream.on('end', () => {
|
||||
console.log('terminou de enviar')
|
||||
resolve(file.filename)
|
||||
});
|
||||
|
||||
bufferStream.on('error', (err) => {
|
||||
console.error('Erro no stream:', err);
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class CustomBufferStream extends Readable {
|
||||
buffer: Buffer;
|
||||
offset: number;
|
||||
chunkSize: number;
|
||||
|
||||
constructor(buffer: Buffer, chunkSize: number) {
|
||||
super({ highWaterMark: chunkSize }); // Configura o tamanho do chunk
|
||||
this.buffer = buffer;
|
||||
this.offset = 0;
|
||||
this.chunkSize = chunkSize;
|
||||
}
|
||||
|
||||
_read() {
|
||||
if (this.offset < this.buffer.length) {
|
||||
const end = Math.min(this.offset + this.chunkSize, this.buffer.length);
|
||||
|
||||
const copiedBuf = Uint8Array.prototype.slice.call(this.buffer);
|
||||
const chunk = copiedBuf.slice(this.offset, end);
|
||||
this.offset = end;
|
||||
this.push(chunk);
|
||||
} else {
|
||||
this.push(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user