したいことはダウンロードフォルダにファイルをダウンロードしたいです!!
Blobに向けてdownload属性を付与したa要素で実現できました。
必要に応じ、S3側でCORSを許可しておいて
html
1<!DOCTYPE html>
2<html>
3
4<head>
5 <script>
6 function downloadit(src) {
7 fetch(src.attributes['data-href'].value)
8 .then(res => res.blob())
9 .then(URL.createObjectURL)
10 .then(url => {
11 const a = document.createElement('a');
12 a.href = url;
13 a.download = src.download;
14 a.click();
15 })
16 }
17 </script>
18</head>
19
20<body>
21 <a download="x.jpg" onclick="downloadit(this)" href="javascript:void(0)"
22 data-href="https://your-site.s3-ap-somewhere.amazonaws.com/path/to/image.jpg">image</a>
23</body>
24
25</html>
追記
ローカルPCの「ダウンロード」フォルダーを指定して保存する
ファイルの保存ダイアログを出すようにしてみました。
(chrome://flags のページで #native-file-system-api を有効にしてお試しください)
javascript:
1// sign up origin trial; or enable the #native-file-system-api flag in chrome://flags.
2// see: https://web.dev/native-file-system#write-file
3async function writeFile(contents) {
4 const fileHandle = await window.chooseFileSystemEntries({ type: 'saveFile' });
5 const writer = await fileHandle.createWriter();
6 await writer.truncate(0);
7 await writer.write(0, contents);
8 await writer.close();
9}
10function download_and_save(src) {
11 fetch(src.attributes['data-href'].value)
12 .then(res => res.blob())
13 .then(writeFile)
14}