1. 前言
在上一篇文章中,我们实现了用户认证和授权功能。本文将介绍如何实现文件上传和下载功能,包括单文件上传、多文件上传、文件下载等。
2. 安装依赖
首先安装文件处理相关的依赖:
pnpm add @nestjs/platform-express multer @types/multer
3. 创建文件模块
使用 NestJS CLI 创建文件模块:
nest g module file
nest g controller file
nest g service file
4. 配置文件上传
在 src/modules/file/config/multer.config.ts 中创建 Multer 配置:
import {
diskStorage } from 'multer';
import {
extname } from 'path';
import {
v4 as uuid } from 'uuid';
export const multerConfig = {
storage: diskStorage({
destination: './uploads',
filename: (req, file, callback) => {
const fileExtName = extname(file.originalname);
const fileName = `${
uuid()}${
fileExtName}`;
callback(null, fileName);
},
}),
fileFilter: (req, file, callback) => {
if (!file.originalname.match(/\.(jpg|jpeg|png|gif|pdf|doc|docx|xls|xlsx)$/)) {
return callback(new Error('Only image, PDF and document files are allowed!'), false);
}
callback(null, true);
},
limits: {
fileSize: 5 * 1024 * 1024, // 5MB
},
};
5. 实现文件服务
在 src/modules/file/file.service.ts 中实现文件服务:
import {
Injectable } from '@nestjs/common';
import {
ConfigService } from '@nestjs/config';
import {
join } from 'path';
import {
existsSync, mkdirSync } from 'fs';
@Injectable()
export class FileService {
constructor(private configService: ConfigService) {
const uploadPath = join(process.cwd(), 'uploads');
if (!existsSync(uploadPath)) {
mkdirSync(uploadPath);
}
}
getFileUrl(filename: string): string {
const baseUrl = this.configService.get('BASE_URL'

最低0.47元/天 解锁文章
1130

被折叠的 条评论
为什么被折叠?



