axios直接上传binary

axios直接上传二进制文件 、 axios直接上传apk、axios直接上传binary

postman中的参数选项中有个binary,平常我们很少使用,可能有的同学遇到这种情况不太会了,认为后端应该有个字段名来接收,或者使用 Formdata,但其实是可以直接把文件给传过去的。

操作

如果上传apk,需设置Content-Type,如果是直接使用 XMLHttpreques发请求,可以不用设置

	"Content-Type": "application/vnd.android.package-archive"

直接将 file 放进去,不需要字段名接收

    upload(file) {
      return new Promise((resolve, reject) => {
        axios.put(url, file, {
            headers: {
              "Content-Type": "application/vnd.android.package-archive",
            },
            onUploadProgress: (progressEvent) => {
              const { loaded, total } = progressEvent;
              const percent = Math.round((loaded * 100) / total);
              console.log('当前进度>>',percent)
            },
          })
          .then(resolve)
          .catch((e) => {
            reject(e);
          });
      });
    }

浏览器下载文件

问题

为什么在浏览器里直接输入下载链接,浏览器可以下载文件,而在代码中用ajax请求却不能直接触发下载?

解答

因为下载是浏览器的内置事件,浏览器的GET请求(frame、a)、POST请求(form)的response会交由浏览器处理
ajax的response是交由JavaScript处理,因此ajax本身无法触发浏览器的下载功能。

做法

在前端使用axios进行GET请求,设置 responseTypeblob,然后通过Blob构造函数创建一个新的Blob对象。

axios({
    url: 'xxx',
    method: "get",
    params,
    responseType:'blob'
  }).then(res=> {
     const blob = new Blob([res.data], {
       type: "application/vnd.ms-excel", // xlsx
     });
     
     let link = document.createElement("a");
     link.href = URL.createObjectURL(blob);
     link.setAttribute("download",`fileName.xlsx`);
     link.click();
     link = null;
  })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值