如何使用nestjs发送blobfile?

mf98qq94  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(357)

我想使用nestjs发送blobfile,这是我第一次使用nodejs。我读了很多文章,但解决不了我的问题。

@Get('/api/font/blob1')
@Header('Content-type', 'font/woff')
async fontBlob1(@Query('text') text, @Query('fontNo') fontNo): Promise<unknown> {
    let font = await this.appService.fontBlob(text, fontNo);
    console.info('blog')
    console.info(font)
    return font['data'];
}

async fontBlob(text, fontNo) {
    let srcFont = '~/font/official/' + fontNo + '.woff';
    let fontmin = new Fontmin()
        .src(srcFont)
        .use(Fontmin.glyph({
            text: text,
            hinting: false
        })).use(Fontmin.ttf2woff());

    const font = await new Promise((resolve, reject) => {
        fontmin.run((error, files) => {
            if (error) {
                reject(error);
            }
            resolve(files[0].contents);
        });
    });

    console.info('blob service finish')
    console.info(font)
    return font;
}
wgx48brx

wgx48brx1#

如果您使用nestjs 8,您可以在这里看到文档
否则你可以用装饰器 @Res() 这将为您提供服务器响应的示例。
例子:

@Get('/api/font/blob1')
@Header('Content-type', 'font/woff')
async fontBlob1(
   @Query('text') text,
   @Query('fontNo') fontNo,
   @Res() res,
): Promise<void> {
     let font: Buffer = await this.appService.fontBlob(text, fontNo);
     const stream = new Readable();

     stream.push(font.buffer);
     stream.push(null);
     stream.pipe(res);
}

如果您使用fastify nest应用程序,则可以如下操作:

@Get('/api/font/blob1')
@Header('Content-type', 'font/woff')
async fontBlob1(
    @Query('text') text, 
    @Query('fontNo') fontNo, 
    @Res({ passthrough: true }) res: FastifyReply // <= Type from fastify
): Promise<void> {
     try {
       let font: Buffer = await this.appService.fontBlob(text, fontNo);
       response.send(file);
     } catch (error) {
       res.removeHeader('Content-type');
       res.removeHeader('Content-disposition');
       res.status(error.status).send(error);
     }
}

相关问题