くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

AxiosでCSVをSJIS/CRLFでダウンロードする

SJIS/CRLFでCSVファイルをダウンロードする必要があったので、
いろいろ調べてみたときの備忘録(´ω`)

方法としては、以下の2つがあるけど、

  1. サーバサイドでSJISのファイルを作って、ブラウザで直接ダウンロード
  2. クライアントサイドでSJISに変換して、ダウンロード

ヘッダでの認証とかをしたかったので、
後者のクライアントサイドでダウンロードの方法を使った。

やりかた

流れとしては、こんな感じ。

axiosでファイルの中身を取得
・LFからCRLFに置換して、改行コードを変換
encoding.jsSJISに変換
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);
}

以上!!

参考にしたサイト様