私は Web ページで次のことを行っています: 要素をクリックすると、(要素に添付された) データのセットがサーバーに送信され、カスタム zip ファイルが生成されます。
$.post(urlprefix + 'makeZip.php', params, function(data){
window.location = urlprefix + 'getZip.php?file=' + data; //get file
}).error(handleAJAXError);
makeZip.php
正常に動作し、クライアントがダウンロードする必要がある (一時的な) zip ファイルの名前を返します。サーバーをきれいに保ちたいのでgetZip.php
、次のことを行う別のスクリプトを介してファイルをルーティングします。
/* RETURN REQUESTED FILE AND DELETE FROM SERVER*/
$filename = $_GET['file'];
/* TRANSFER FILE CONTENTS */
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="customDownload.zip"');
header('Content-Length: '.filesize($filename));
readfile($filename);
/* REMOVE FILE FROM SERVER */
unlink($filename);
すべてのブラウザはファイルを正常にダウンロードしますが、1 つの問題に直面しています。ファイルがかなり大きくなる可能性があるため (最大 200MB)、ダウンロードにかかる時間を見積もるとよいと思います。そのため、Content-Length
ヘッダーを送信しています(指定されたファイルサイズは正しいです)。それでも、私がテストしたすべてのブラウザーは、ファイルサイズが不明であることを示しています (これにより、ユーザーがダウンロードをスキップする可能性があります)。
これは私のヘッダー情報に何らかの問題がありますか? クライアント側の問題ですか?クライアントにファイルをダウンロードさせるには、別の方法を使用する必要がありますか?