user001232:
私はいくつかのpdfファイルは私のウェブサイトに表示され、私はそれが自動的に新しいウィンドウで開くのではなく、ダウンロードします]をクリックしますならば、私はその機能を作成しました。私はそれをダウンロードすることができますが、問題は、私はそれを開くと、それが空であるが、私はメモ帳などの別のエディタで開きます。このようなテキストを得ました
�o�w��v�����%l&��䰱�L'ā5���
私はこれについて何をすべき?私は、ファイルを右にダウンロードしましたか?データは暗号化されたようです。どのように私はそれとショーがPDFで解読するだろうか?
ここに私のaxios関数であります
downloadWithAxios(file){
axios.get(encodeURI(file.url,{
method: 'GET',
mode: 'no-cors',
responseType: 'blob',
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/pdf',
},
}))
.then((response)=>{
console.log(response.data)
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.pdf');
document.body.appendChild(link);
link.click();
})
}
ヴィンス:
あなたは、実際にファイルをダウンロードしたが、私はあなたがそれをデコードする必要がなければならないと思います。実際には、実行することにより、バックエンドのアプローチを試すことができます
axios URLルートを呼び出すと、コントローラを指しを行います
downloadFromController(file){
let params = {url : file.url}
console.log(params);
axios.get('/generateFile?params='+file.url)
.then(()=>{
window.location.assign('/generateFile?params=' +file.url); //prevent from redirecting to pdf url
})
}
お使いのコントローラを指してあなたのルート: Route::get('/generateFile{params?}','YourController@downloadFile');
そして、あなたのコントローラでのような関数を定義します
public function downloadFile(Request $request){
$url = $request->params; //pass the url params from your axios
$name = 'file.pdf'; //your file name
$temp = tempnam(sys_get_temp_dir(), $name);
copy($url, $temp); //use copy() then send it to user in the response
return response()->download($temp,$name);
}
これは、新しいウィンドウを開きません。あなたのPDFファイルのリンクをクリックした場合には、自動的にダウンロードされます。