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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐