지난 블로그에서 드래그 & 드롭 파일 업로드를 구현을 정리했는데 이번엔 csv 파일 업로드와 파싱관련하여 레퍼런스찾기가 힘들다.. 검색해보면 죄다 csv-parser
를 사용한 예시인데 csv-parse
는 fs
의 ReadStream
만 활용할 수 있기때문에 HTTP POST body를 파싱하기엔 적절하지 않다.
일부 예시는 이런경우 body(Blob)을 로컬에 파일로 저장 한 뒤 ReadStream
을 만들어서 사용하면 된다고하는데 왜그래…
파일 업로드
So simple, 이때까지만 해도 금방 끝날 줄만 알았던 작업이…
1
2
3
4
5
6
fetch('/api/product', {
method: 'POST',
body: file
}).then((response) => {
//handle response
});
Backend
서론이 길었으니 바로 결과로..
찾아보니 string을 지원하는csv-parse
라이브러리가있어서 사용.
csv-parser
와는 다른 라이브러리이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { parse } from 'csv-parse';
...
export async function POST(request: Request) {
const records: any[] = await request
.blob()
.then((blob) => blob.text())
.then((text) => {
return new Promise((resolve, reject) => {
parse(text, (err, output) => {
if (err) reject(err);
else resolve(output);
});
});
});
//handle records
//response result
}