クライアントサイドのお話です。
フォームで取得したファイルオブジェクトをREST APIにJSON形式で送りつけたいことってありますよね。
そのままじゃ送れないのでBASE64エンコードをする必要があると思います。
意外と簡単に行かなく、めちゃくちゃ処理が重くなってはまったりしたのでここに動くソースを残します。
クライアントサイドで重い処理を動かして兵庫県警に逮捕されないように気を付けましょう。
const uint8Array = Array.from<number>(new Uint8Array(await file.arrayBuffer()))
let encodedStr = ''
for (let i = 0; i < uint8Array.length; i += 1024) {
encodedStr += String.fromCharCode.apply(
null, uint8Array.slice(i, i + 1024)
)
}
const base64 = window.btoa(encodedStr)