postman插件測試正常。能得到文件。但是在進行前端渲染時。ajax請求會進入error。
如下。postman正常
通過表單裏的按鈕,可以第一次ajax請求通過id拿到存儲的文件信息。但是在進行二次ajax時,會發現一直進入error。查看後臺,發現文件名是拼接正確的。雖然中文會有編碼錯誤導致路徑不對而失敗。但是純英文的路徑正確仍然是進入erro下載失敗。
網上查了很多資料。也通過瀏覽器控制檯和測試找了很多原因和修改。
最後搞明白。通過ajax是無法讓res.download()下載的。
關於res.download這個方法。進去查看是這樣的。
他在header中加了些字段。通過header瀏覽器根據這些字段保存文件。但是ajax請求。這些字段沒有被處理。所以文件無法下載。所以不能使用ajax。
既然搞清楚爲什麼,那就換種思路。
兩種方法。第一種,第一次發送ajax得到了要下載的文件的id,然後第二次ajax直接註釋掉。
通過這個方法來訪問下載路徑就可以了
也可以在頁面的模板。下載的鏈接處添加 。然後ajax請求都不需要了。
{{each list}}
<tr>
<td id="hidden">{{$value.id}}</td>
<td>{{$value.username}}</td>
<td>{{$value.name}}</td>
<td>{{$value.description}}</td>
<td>{{$value.filename}}</td>
<td id="add-delete"><a href="javascript:;">編輯</a><a href="/download?url={{$value.filename}}">下載</a></td>
</tr>
{{/each}}
注意最後一列
然後後臺不變。
再來試試
既然get請求,本來就是可以直接打開的。沒必要執着用ajax。postman能成功也是一個道理。