![](/img/trans.png)
[英]Download a PDF received from an API call from ERP (weclapp) that is FlateDecoded in Javascript
[英]How to download an inline pdf received from API using javascript?
我有一個后端可以處理帶有 pdf 的各種操作,其中之一 - 將多個 pdf 合並為一個。
場景如下:
return response()->file(realpath($pathToFile), ['Content-Disposition' => 'inline; filename="'.$file,'Content-Type' => 'application/pdf']);
我需要做的是在新的 window 中打開這個收到的文件作為內聯 pdf 預覽,但我必須將它命名(我嘗試使用 blob,但沒有提供標題的選項),以便當用戶點擊“下載” pdf 查看器的按鈕,他們得到一個命名下載,它由列表標題命名。 聽起來像是一項非常基本的任務,但我找不到任何適當的解決方案來實現這一目標。 將 url 提供給文件而不是文件響應也不是一種選擇,因為用戶只能下載他們的列表,並且他們不應該能夠直接通過 url 檢索這些文件。
我設法通過繞行解決了我的問題,這可能不是最優化的解決方案,而且感覺有點 hack-ish,但這是唯一對我有用的解決方案。
我在我的 API 后端創建了兩條路由:
第一條路線
Route::post('/download-file', 'PdfProcessController@downloadFileApi');
接受文件id
作為參數。 downloadFileApi
方法檢查用戶是否有權訪問所需文件,如果有,則使用Sanctum
發出令牌$token = Auth::user()->createToken('access_file_token');
最后,此方法返回 url,這是使用生成的令牌調用第二個 API 路由return sprintf('%s/api/download-file/%s?_token=%s', env('APP_URL'), $request->input('id'), $token->plainTextToken);
第二條路線Route::get('/download-file/{hash}', 'PdfProcessController@downloadFile')->middleware(['token.to.header', 'auth:sanctum']);
token.to.header
中間件是基於此答案實現的。 通過 Laravel Sanctum 進行身份驗證,通過將令牌作為 GET 查詢參數傳遞內部downloadFile
令牌被破壞(因為它已被使用)並返回內聯 Z43700941ED 。
在我的前端我做
this.$axios.post('/api/download-file', {id: fileid})
.then(response => {
window.open(response.data, '_blank');
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.