SJIS/CRLFでCSVファイルをダウンロードする必要があったので、
いろいろ調べてみたときの備忘録(´ω`)
方法としては、以下の2つがあるけど、
ヘッダでの認証とかをしたかったので、
後者のクライアントサイドでダウンロードの方法を使った。
やりかた
流れとしては、こんな感じ。
・axiosでファイルの中身を取得
・LFからCRLFに置換して、改行コードを変換
・encoding.jsでSJISに変換
・FileSaver.jsでダウンロード
import { AxiosRequestConfig, AxiosResponse } from "axios"; import { convert, stringToCode } from "encoding-japanese"; import { saveAs } from "file-saver"; export async function download(url: string, fileName: string) { // ** APIでファイル内容を取得 const res = await $axios.get(url); // ** ファイルの中身を変換 // * 改行コードをLFからCRLFに変換 const resData = str.replaceAll("\n", "\r\n"); // * 文字コードをSJISに変換 const unicodeList = stringToCode(resData); const sjisCodeList = convert(unicodeList, "SJIS"); const sjisData = new Uint8Array(sjisCodeList); // ** ファイルをダウンロード const blob = new Blob([sjisData], { type: res.data.type }); saveAs(blob, fileName); }
以上!!