PDFのzipファイルを作成してブラウザにダウンロードしています。ajaxを使用していて、ダウンロードできるようにファイルを受信したいと思っています。
return response()->download(public_path().'/documents/'.$zipName , $zipName, $headers);
私もこの方法を試しましたが、うまくいきませんでした。何が欠けているのかわかりません。
Laravelの応答:
$downloadData = [
'zipFile' => $zipName,
'headers' => $headers,
'url' => public_path('documents/').$zipName
];
return response()->json(['status'=>1,'data'=> $downloadData]);
AJAXの成功:
var a = document.getElementById('zipDownload');
a.href = data.data.url;
a.target = '_blank';
a.download = data.data.zipFile;
setTimeout(function() {
a.click();
}, 200);
アンカーはファイルの正しいパスを示しており、新しいタブに貼り付けるとダウンロードされます。しかし、アンカータグをトリガーすると、ローカルリソースの読み込みが許可されていません:file:/// C:/ xampp / htdocs / ems /public/documents/records-20200512002210.zip
Laravelの応答でこれを使用してみてください(http:// localhost:8000などを使用してWebアプリにアクセスしている場合、laravelアプリのパブリックディレクトリがドキュメントルートとして設定されています)。
$downloadData = [
'zipFile' => $zipName,
'headers' => $headers,
'url' => '/documents/'.$zipName
];
return response()->json(['status'=>1,'data'=> $downloadData]);
ここでは、設定されている構成/環境変数に応じて、url('/documents/'.$zipName)
またはroute()
関数を使用することもできます。
file:///C:/xampp/htdocs/ems/public/documents/records-20200512002210.zip
はWebサーバー上にあるファイルリソースであり、フロントエンド(JS)はそれを認識しないはずです。したがって、ダウンロードするzipファイルには、WebアプリケーションのURIを基準にしてアクセスする必要があります。
あなたのケースでは、ブラウザは、アクセスのようなものにできるかどうhttp://localhost:8000/documents/<zip file name>.zip
かhttp://localhost/ems/documents/<zip file name>.zip
、さらにを続行する、あなたがしている良いです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加