nestjs 文件上传

文件上传需要使用 拦截器 UseInterceptors 在'@nestjs/common'包内

拦截器功能参考:https://docs.nestjs.cn/7/interceptors

单文件上传

所需依赖有FileInterceptor,UploadedFile

FileInterceptor 是拦截器负责处理请求接口后的文件 再使用UploadedFile 进行接受

    import {  UploadedFile, UseInterceptors ,Body } from '@nestjs/common';
    import {  FileInterceptor } from '@nestjs/platform-express';

    @Post("upload/single")
    // "file" 表示 上传文件的键名
    @UseInterceptors(FileInterceptor("file"))
    upload(@UploadedFile() file, @Body() body) {
        //body为form/data中的其他非文件参数
        console.log(file, body);
        return "上传成功"
    }
    // 注意!如果当前参数名没有"file"键将自动报错为400

多文件上传

所需依赖有FilesInterceptor,UploadedFiles

基本操作与单文件上传一致 但注意依赖名不同,多文件上传有复数s

    import {  UploadedFiles, UseInterceptors ,Body } from '@nestjs/common';
    import {  FilesInterceptor } from '@nestjs/platform-express';

    @Post("upload/multiple")
    @UseInterceptors(FilesInterceptor("files"))
    uploadMultiple(@UploadedFiles() files, @Body() body) {
        // files 变成数组,可以传递多个文件 
        console.log(files, body);
        return "上传成功"
    }

多文件上传自定义多个键名

所需依赖有FileFieldsInterceptor,UploadedFiles

与上述操作基本不变 仅拦截方法变更,需要传入参数名数组

    import {  UploadedFiles, UseInterceptors ,Body } from '@nestjs/common';
    import {  FileFieldsInterceptor } from '@nestjs/platform-express';

    @Post("upload/multipleKey")
    @UseInterceptors(FileFieldsInterceptor([
        //maxCount 为最大接受文件数量,这里为最多接收10个文件
        //不传maxCount为无限制
        { name: "files", maxCount:10 },
        { name: "custom" }
    ]))
    uploadMultipleKey(@UploadedFiles() files, @Body() body) {
        // 这里files 将被改为对象 {files:[File],custom:[File]}
        console.log(files, body);
        return "上传成功"
    }

你可能感兴趣的:(nestjs 文件上传)