- 创建项目
- Nest 控制器
- nest 配置路由请求数据
- Nest 服务
- Nest 模块
- 配置静态资源
- 配置模板引擎
- Cookie 的使用
- Session 的使用
- 跨域,前缀路径、网站安全、请求限速
- 管道、守卫、拦截器、过滤器、中间件
- 一例看懂中间件、守卫、管道、异常过滤器、拦截器
- 数据验证
- 配置抽离
- 环境配置
- 文件上传与下载
- 实现图片随机验证码
- 邮件服务
- nest 基于 possport + jwt 做登陆验证
- 对数据库的密码加密:md5 和 bcryptjs
- 角色权限
- 定时任务
- 接入 Swagger 接口文档
- nest 连接 Mongodb
- typeORM 操作 Mysql 数据库
- nest 统一处理数据库操作的查询结果
- 数据库实体设计与操作
- typeorm 增删改查操作
- typeorm 使用事务的 3 种方式
- typeorm 一对一关系设计与增删改查
- typeorm 一对多和多对一关系设计与增删改查
- typeorm 多对多关系设计与增删改查
- nest 连接 Redis
- 集成 redis 实现单点登录
- Q:nestJS 注入其他依赖时为什么还需要导入其 module
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
文件上传与下载
yarn add @nestjs/platform-express compressing compressing 文件下载依赖,提供流的方式
配置文件的目录地址,以及文件的名字格式
// src/config/file.ts 上传文件配置 import { join } from 'path'; import { diskStorage } from 'multer'; /** * 上传文件配置 */ export default { root: join(__dirname, '../../assets/uploads'), storage: diskStorage({ destination: join( __dirname, `../../assets/uploads/${new Date().toLocaleDateString()}`, ), filename: (req, file, cb) => { const filename = `${new Date().getTime()}.${file.mimetype.split('/')[1]}`; return cb(null, filename); }, }), };
// app.module.ts import { ConfigModule, ConfigService } from 'nestjs-config'; @Module({ imports: [ // 加载配置文件目录 src/config ConfigModule.load(resolve(__dirname, 'config', '**/!(*.d).{ts,js}')), ], controllers: [], providers: [], }) export class AppModule implements NestModule {}
// upload.controller.ts import { Controller, Get, Post, UseInterceptors, UploadedFile, UploadedFiles, Body, Res, } from '@nestjs/common'; import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'; import { FileUploadDto } from './dto/upload-file.dto'; import { UploadService } from './upload.service'; import { Response } from 'express'; @Controller('common') export class UploadController { constructor(private readonly uploadService: UploadService) {} @Post('upload') @UseInterceptors(FileInterceptor('file')) uploadFile(@UploadedFile() file) { this.uploadService.uploadSingleFile(file); return true; } // 多文件上传 @Post('uploads') @UseInterceptors(FilesInterceptor('file')) uploadMuliFile(@UploadedFiles() files, @Body() body) { this.uploadService.UploadMuliFile(files, body); return true; } @Get('export') async downloadAll(@Res() res: Response) { const { filename, tarStream } = await this.uploadService.downloadAll(); res.setHeader('Content-Type', 'application/octet-stream'); res.setHeader('Content-Disposition', `attachment; filename=${filename}`); tarStream.pipe(res); } }
// upload.service.ts import { Injectable, HttpException, HttpStatus } from '@nestjs/common'; import { join } from 'path'; import { createWriteStream } from 'fs'; import { tar } from 'compressing'; import { ConfigService } from 'nestjs-config'; @Injectable() export class UploadService { constructor(private readonly configService: ConfigService) {} uploadSingleFile(file: any) { console.log('file', file); } UploadMuliFile(files: any, body: any) { console.log('files', files); } async downloadAll() { const uploadDir = this.configService.get('file').root; const tarStream = new tar.Stream(); await tarStream.addEntry(uploadDir); return { filename: 'download.tar', tarStream }; } }
// upload.module.ts import { Module } from '@nestjs/common'; import { MulterModule } from '@nestjs/platform-express'; import { ConfigService } from 'nestjs-config'; import { UploadService } from './upload.service'; import { UploadController } from './upload.controller'; @Module({ imports: [ MulterModule.registerAsync({ useFactory: (config: ConfigService) => config.get('file'), inject: [ConfigService], }), ], controllers: [UploadController], providers: [UploadService], }) export class UploadModule {}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论