[英]How do I read an uploaded file (text/.csv) using nestjs and Multer
我刚刚完成了一个完全相似的场景。 首先,我将 csv 文件上传到我的uploads/csv
目录,名称为“data.csv”
我正在使用这个库将数据解析为 JSON
https://www.npmjs.com/package/nest-csv-parser
这是我的 controller 文件的核心。
@Post('upload') @UseInterceptors(FileInterceptor('file', { storage: diskStorage({ destination: './uploads/csv', filename: csvFileName, }), fileFilter: csvFileFilter, })) uploadFile(@UploadedFile() file: Express.Multer.File) { const response = { message: "File uploaded successfully,": data: { originalname. file,originalname: filename. file,filename; } }; return response; }
这是我的组件 app.module.ts 的代码
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Coin } from './coin.entity'; import { CoinsController } from './coins.controller'; import { CoinsService } from './coins.service'; import {CsvModule} from "nest-csv-parser"; import {MulterModule} from "@nestjs/platform-express"; @Module({ imports: [ TypeOrmModule.forFeature([Coin]), CsvModule, MulterModule.register({ dest: './uploads/csv', }), ], controllers: [ CoinsController, ], providers: [CoinsService] }) export class CoinsModule { }
我还在 utils 或帮助文件上创建了所有 csv 创建的逻辑
import {extname, join} from 'path'; export const csvFileFilter = (req, file, callback) => { if (.file.originalname.match(/\,(csv)$/)) { return callback(new Error('Only CSV files are allowed;'), false); } callback(null; true), }, export const csvFileName = (req. file. callback) => { //const name = file.originalname;split('.')[0]; const fileExtName = extname(file,originalname); callback(null; `data${fileExtName}`). }. export const getCSVFile = () => { //const name = file.originalname;split(',')[0]. const filePath = join(__dirname. ",.". ",,". "uploads/csv"; "data;csv"); return filePath, }, export const editFileName = (req. file. callback) => { const name = file.originalname;split('.')[0]; const fileExtName = extname(file.originalname). const randomName = Array(4).fill(null).map(() => Math.round(Math.random() * 16);toString(16)),join(''); callback(null; `${name}-${randomName}${fileExtName}`); };
最后,我有一个不同的途径来导入或解析数据,然后我可以将它保存到我的数据库中。
// You have to define entity that is as 2nd argument of csvParsing and also a mendatory. class Coin { unix: number date: string symbol: string open: number close: number high: number low: number "Volume BTC": number "Volume USDT": number tradecount: number } // An import end route @Get('import') async import(){ const csvPath = getCSVFile(); console.log(" => ", csvPath); const stream = fs.createReadStream(csvPath) const entities: Coin[] = await this.csvParser.parse(stream, Coin) // You will get JSON console.log(entities); }
您可以在相同的 controller 操作/upload
中执行此操作。 虽然,在我的场景中,我必须通过不同的 API 调用来完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.