概要
aws-sdkのgetObjectを使用して、S3からファイルダウンロード行ったら
ファイルが壊れていた時のメモです
以下のサイトを参考にBlobを使用、リンクを生成しダウンロードできるようにしたかったのですが、
getObjectで取得したものをそのまま入れるとファイルが壊れてしまいました
ダウンロードはボタンをクリックしたときにファイルがダウンロードされるようにしています
getObjectを使用してデータを取得する処理は省略しています
s3Dataにs3から取得したデータを格納しています
const downloadButton = document.querySelector('.download-button');
downloadButton.addEventListener('click', () => {
const blob = new Blob([s3Data]);
const link = document.createElement('a');
link.download = 'test.txt';
link.href = URL.createObjectURL(blob);
link.click();
URL.revokeObjectURL(link.href);
}, false);
結論
const blob = new Blob([s3Data]);
を const blob = new Blob([Uint8Array.from(s3Data).buffer]);
にしたところ、ファイルが壊れずにダウンロードできました
Blobでうまく変換ができていなかったのが原因でした
参考
- aws-sdk getObject
- Blobを使用したダウンロード処理