NestJS学习笔记之上传图片-静态目录

1.安装multer及使用

multer   @nestjs/platform-express nestJs自带了
multer   @types/multer

新建upload模块

在upload.module使用MulterModule.register注册存放图片的目录

需要用到multer的diskStorage,destination设置存放目录,extname用来读取文件后缀,filename给文件重新命名

import { Module } from '@nestjs/common';
import { UploadService } from './upload.service';
import { UploadController } from './upload.controller';
import { MulterModule } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
import { extname, join } from 'path';

@Module({
  imports: [MulterModule.register({
    storage: diskStorage({
      destination: join(__dirname, "../images"),// 图片存放目录
      filename: (_, file, callback) => {
        //定义fileName是为了把上传后的图片重新命名,这里是利用时间戳的形式命名,保证命名的唯一性
        const fileName = `${new Date().getTime() + extname(file.originalname)}`
        return callback(null, fileName)
      }
    })
  })],
  controllers: [UploadController],
  providers: [UploadService],
})
export class UploadModule { }

保存后,启动项目,可以看到项目启动就会打包,在dist目录下如果有images文件夹代表成功了

2.controller 使用

在upload.controller中,使用UseInterceptors装饰器,它里面有一些参数,如果上传单个文件就使用FileInterceptor,如果上传多个文件就使用FilesInterceptor,使用UploadedFile装饰器接受file文件

import { Controller, Get, Post, Body, Patch, Param, Delete, UploadedFile, UseInterceptors } from '@nestjs/common';
import { UploadService } from './upload.service';
import { CreateUploadDto } from './dto/create-upload.dto';
import { UpdateUploadDto } from './dto/update-upload.dto';
import { FileInterceptor } from '@nestjs/platform-express';

@Controller('upload')
export class UploadController {
  constructor(private readonly uploadService: UploadService) {}

  @Post('album')
  @UseInterceptors(FileInterceptor('file'))
  create(@UploadedFile() file) {
    console.log(file);
    return true;
  }

}

使用Apipost进行接口测试

请求成功,并且控制台打印出file的结果了

并且在打包后的dist目录下的images文件夹中可以看到图片已经存放进去了

3.生成静态目录访问上传之后的图片

在mian.ts中导入类型NestExpressApplication

useStaticAssets中的prefix是虚拟前缀

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { VersioningType } from '@nestjs/common';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  app.enableVersioning({
    type: VersioningType.URI
  })
  app.useStaticAssets(join(__dirname,'images'),{
    prefix:"/zl"
  })
  await app.listen(3000);
}
bootstrap();

此时先去images文件夹下复制我们要访问的图片名称,然后去浏览器中输入地址进行访问

访问http://localhost:3000/zl/1708440096666.jpg

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值