multer中間件的上傳於下載之大坑:res.download()與ajax的問題

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能成功也是一個道理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章