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