Supabase Storage から別名でファイルをダウンロードしたい
に公開背景
ファイルストレージに Supabase Storage を使用していますが、`getPublicUrl` や `createSignedUrl` で発行した URL を直接 `<a>` タグの `href` に指定して直接ダウンロードさせようとしていました。
しかし、Supabase Storage に日本語を使うと Invalid Key エラーで書いたように Supabase Storage には日本語ファイル名で直接保存できないため base64 でエンコードして保存しています。
そのため、リンクをクリックすると base64 でエンコードされた名前でダウンロードされてしまいます。
anchor タグの download 属性にデコードした名前を指定してもはクロスオリジンのため無視されてしまいます。
解決方法
`createSignedUrl` や `getPublicUrl` を使用する際に、`download` オプションを設定します。
// createSignedUrl の場合
const createSignedUrlResult = await client.storage
.from("file")
.createSignedUrl(path, expiresIn, {
download: fileName,
});
// getPublicUrl の場合
const getPubicUrlResult = await client.storage
.from("file")
.createSignedUrl(path, {
download: fileName,
})