前提・実現したいこと
ある条件で抽出された一覧の表に、チェックボックスが設けられており、別途設けたダウンロードボタンを押すと、
チェックボックスにチェックした複数の項目のpdfを、jszipを用いてzipファイルでダウンロードするシステムを作成しています。
発生している問題・エラーメッセージ
zipファイルにしてダウンロードするところまでは実現出来ているのですが、ダウンロードの1度目だけ、zipファイル内のファイル名と 実際のpdfデータがシャッフルされる(一致しない)という症状が起こっております。 しかし、ダウンロード後に、そのまま再度ダウンロードボタンを押すと、pdfの内容とファイル名が一致してダウンロードされるように なります。 また、さらにその状態で、チェックボックスに新しくチェックを複数追加すると、それまでにチェックしたファイルは問題ないのですが、 追加したファイルのみシャッフルされてダウンロードされ、そのままもう一度ダウンロードボタンを押すと、全てのファイルが正しい名称で ダウンロード出来るようになります。 すべてが1回目で起こる為、原因が掴めずに困っております。 よろしくお願いいたします。
該当のソースコード
javascript
1 2function DLzip(){ 3 var urls=findElements("check"), 4 pdfurls = new Array(), 5 ii=0; 6 7 for (var i=0; i<urls.length; i++){ 8 if (urls[i].checked){ 9 pdfurls[ii]=urls[i].value; 10 ii++; 11 } 12 } 13 batchDownload(pdfurls); 14}; 15 16var batchDownload = function(urlList) { 17 var zip = new JSZip(), 18 ii=0, 19 DLfilename="", 20 deferreds = []; 21 22 for (var i = 0; i < urlList.length; i += 1) { 23 var deferred = downloadFile("../data/" + urlList[i] + ".pdf").done(function(xhr) { 24 var DLfilename = urlList[ii] + ".pdf"; 25 ii++; 26 zip.file(DLfilename, xhr.response); 27 }) 28 deferreds.push(deferred); 29 } 30 31 $.when.apply($, deferreds).done(function() { 32 zip.generateAsync({type:"blob"}).then(function (content) { 33 saveAs(content,"DownloadFile.zip"); 34 }); 35 }); 36}; 37 38var downloadFile = function (url) { 39 var xhr = new XMLHttpRequest(), 40 deferred = new $.Deferred(); 41 42 xhr.addEventListener('load', function() { 43 xhr.response; 44 deferred.resolve(xhr); 45 }); 46 xhr.open('GET', url, true); 47 xhr.responseType = 'arraybuffer'; 48 xhr.send(); 49 return deferred.promise(); 50}
試したこと
- console.logなどを用いて実際にダウンロードするファイルの場所とファイル名が同じになるかの確認
⇒同一であることを確認
- ブラウザのキャッシュクリア
⇒改善されず
- zipファイルに格納されるファイルの順番
⇒チェックしてある上から順に読み取りを確認
- シャッフルされた際の法則性の確認
⇒特定できず
補足情報(FW/ツールのバージョンなど)
- 抽出方法は、inputタブにname="check"、value="(ファイル名)"を設定し、checkを設定したチェックボックスの中からcheckedに
一致するvalueの情報を読み取り、配列に格納させています。
- ダウンロードボタンを押すとDLzipが実行されるように設定しています。
- zipファイルの扱いも含め、ダウンロード系については全く知識がありませんでしたので、こちらの
サイトを参考にさせて頂いています。
- 使用しているブラウザはIEになりますが、Chromeでも確認したところ、同じ症状が起こっています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/27 08:10
2021/05/27 08:23
2021/05/27 08:25
2021/06/03 01:09
2021/06/03 05:13