如何从邮递员获取 CSV 文件并在 NestJs 上转换为数组

Posted

技术标签:

【中文标题】如何从邮递员获取 CSV 文件并在 NestJs 上转换为数组【英文标题】:How to get a CSV file from postman and Convert into array on NestJs 【发布时间】:2021-07-17 01:54:42 【问题描述】:

我正在尝试使用单个端点创建一个 API,该端点接收 csv 文件并将其内容转换为 json 数组。

我正在使用 NestJs,我知道了如何使用 Postman 上传文件

这是我的控制器

@Controller('csv')

导出类 CsvController

constructor(private csvService: CsvService) 

@Post()
@UseInterceptors(FileInterceptor('file'))
async uploadFile(@UploadedFile() file: any, @Res() res) 
    console.log(file)
    //this is the service which Im trying to use to convert into json array
    const resp = await this.csvService.parse(file)

    res.send(file.buffer) //this just return the csv content

在服务中我添加了库 nest-csv-parser 但它需要一个流类型,流类型需要一个文件位置。所以我不知道如何转换从 Postman 收到的 CSV 文件,而不是将其放入我的项目中。

 constructor(private readonly csvParser: CsvParser) 

async parse(stream: any) 
    const str = createReadStream(stream)

    const entities: any = await this.csvParser.parse(
        str,
        Person
    )

    console.log(entities)

关于我能做什么的任何想法?

如果我错过了,请告诉我!

【问题讨论】:

【参考方案1】:

我怀疑您从该端点获得的文件是缓冲区。因此,在使用 csv 解析器之前,您需要将缓冲区转为流。为了将缓冲区转换为流,使用来自turning buffer to stream using NodeJS的可读流

【讨论】:

以上是关于如何从邮递员获取 CSV 文件并在 NestJs 上转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何从流中读取 CSV 文件并在写入时处理每一行?

如何从 zip 中提取 csv 文件并在 python 中将其保存到磁盘? [复制]

如何将邮递员请求正文保存在一个地方并在运行时通过

当我们从 s3 中的 csv 文件读取数据并在 aws athena 中创建表时如何跳过标题。

我们如何在DTO中使用对象数组和nestjs中的multipart-formdata?

如何从 NestJS 中的 Query 中获取参数