回答編集履歴

3

てすと

2024/04/21 08:54

投稿

yambejp
yambejp

スコア115010

test CHANGED
@@ -5,3 +5,27 @@
5
5
  - CORSに問題がなければ一旦fetchで受け取ってダウンロードさせて完了したら別ページにとぶ
6
6
  - サーバー側のHTMLでやるならダウンロードページに飛んだうえでmetaでダウンロードさせたあと、setTimeoutでlocation.hrefで完了ページに移動
7
7
  - 完了ページにダウンロードしたいデータを埋め込んで開き、download属性のついたアンカータグをクリックしてダウンロード
8
+
9
+ # 参考
10
+ - fetchして別ページにとぶ
11
+ ```javascript
12
+ <script>
13
+ document.addEventListener('click',async({target})=>{
14
+ if(target.matches('#btn')){
15
+ const url="sample.csv"; //ダウンロードしたいcsvのurl
16
+ const download="download.csv"; //ダウンロードしたときの名前
17
+ const comppage="complete.html"; //飛びたいページ
18
+ const blob=await fetch(url).then(res=>res.blob());
19
+ const fr = new FileReader();
20
+ fr.addEventListener('load',e=>{
21
+ const href=e.target.result;
22
+ const a=Object.assign(document.createElement('a'),{download,href});
23
+ a.click();
24
+ location.href=comppage;
25
+ });
26
+ fr.readAsDataURL(blob);
27
+ }
28
+ });
29
+ </script>
30
+ <input type="button" value="download" id="btn">
31
+ ```

2

調整

2024/04/21 05:26

投稿

yambejp
yambejp

スコア115010

test CHANGED
@@ -4,4 +4,4 @@
4
4
  たとえば
5
5
  - CORSに問題がなければ一旦fetchで受け取ってダウンロードさせて完了したら別ページにとぶ
6
6
  - サーバー側のHTMLでやるならダウンロードページに飛んだうえでmetaでダウンロードさせたあと、setTimeoutでlocation.hrefで完了ページに移動
7
-
7
+ - 完了ページにダウンロードしたいデータを埋め込んで開き、download属性のついたアンカータグをクリックしてダウンロード

1

追記

2024/04/21 05:24

投稿

yambejp
yambejp

スコア115010

test CHANGED
@@ -1,2 +1,7 @@
1
1
  サーバー側の処理では無理です
2
2
  jsでやるか、リダイレクトした先でダウンロードをさせるかのどちらかがよいでしょう
3
+
4
+ たとえば
5
+ - CORSに問題がなければ一旦fetchで受け取ってダウンロードさせて完了したら別ページにとぶ
6
+ - サーバー側のHTMLでやるならダウンロードページに飛んだうえでmetaでダウンロードさせたあと、setTimeoutでlocation.hrefで完了ページに移動
7
+