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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值