import { Controller, Get, Param, Post, Request, Res, UploadedFile, UseGuards, UseInterceptors, } from '@nestjs/common'; import { UsersService } from './users.service'; import { ApiOperation, ApiParam } from '@nestjs/swagger'; import { FileInterceptor } from '@nestjs/platform-express'; import { v4 as uuidv4 } from 'uuid'; import urlencode = require('urlencode'); import stream = require('stream'); @Controller('api/p/t/users') export class UsersController { constructor(private readonly userService: UsersService) {} @Get() getHello(): string { return 'users controller[api/p/users2]'; } @ApiOperation({ summary: '根据id查询用户' }) @ApiParam({ name: 'id', description: '用户id' }) @Get('u:id') findOne(@Param() params): any { const user = this.userService.findOneById(params.id); return user; } @ApiOperation({ summary: '上传头像文件' }) @Post('upload-avatar/:id') @UseInterceptors( FileInterceptor('file', { limits: { fileSize: 2 * 1024 * 1024 } }), ) async uploadAvatar(@UploadedFile() file, @Param() params) { const user = await this.userService.findOneById(params.id); const avatarKey = uuidv4(); const accessory = await this.userService.createPAccessory({ originalFilename: file.originalname, key: avatarKey, uploadFile: file.buffer, uploadDate: new Date(), }); user.avatar = accessory; const updateInfo = await this.userService.updateAvatar(user.id, user); return { id: user.id, avatarKey: accessory.key }; } @ApiOperation({ summary: '获取头像' }) @Get('avatar/:key') findAvatar(@Res() res, @Param() params) { const avatar = this.userService.findAvatarOneByKey(params.key); avatar.then(function (accessory) { const filename = urlencode(accessory.originalFilename, 'utf8'); const readStream = new stream.PassThrough(); readStream.end(accessory.uploadFile); res.set('Content-disposition', 'attachment; filename=' + filename); res.set('Content-Type', 'text/plain'); readStream.pipe(res); }); } }