ajax上传和下载文件

ajax上传和下载文件

jQuery本身支持上传文件,但是不支持下载文件,这里要用到的组件是axios。

<form class="form-horizontal" method="post" role="form" id="fileForm">
   <div class="form-group">
      <div class="col-lg-4 col-md-4 col-sm-12 seach_col"></div>
      <div class="col-lg-4 col-md-4 col-sm-12 seach_col">
         <div class="input-group">
            <span class="input-group-addon">字段1</span>
            <input type="text" class="form-control" name="column" placeholder="请输入内容">
         </div>
      </div>
   </div>
   <div class="form-group">
      <div class="col-lg-4 col-md-4 col-sm-12 seach_col"></div>
      <div class="col-lg-4 col-md-4 col-sm-12 seach_col">
         <div class="input-group">
            <span class="input-group-addon">文件</span>
            <input type="file" class="form-control" name="filePath" placeholder="请选择文件">
         </div>
      </div>
   </div>
   <div class="form-group">
      <div class="col-lg-4 col-md-4 col-sm-12 seach_col"></div>
      <div class="col-lg-4 col-md-4 col-sm-12 seach_col">
         <button type="button" class="btn blue  btn-sm" onclick="submitForm()">提交</button>
      </div>
   </div>
</form>

<!-- 引入axios组件 -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
/**
 * 提交表单
 * 如果需要下载文件,需要加上responseType: 'blob'
 * 这个例子,支持上传文件的同时下载文件,上传时有上传进度,下载时后台需要返回一个文件流
 */
function submitForm() {
       var filePath = $("#fileForm input[name='filePath']").val();
       var fileName = filePath.substring(filePath.lastIndexOf("\\") + 1);
       //后缀名
       var suf = fileName.substring(fileName.lastIndexOf(".") + 1);
       //新文件名
       var newName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + commons.getFormatDateTime(new Date(), null, true) + "." + suf;
       var formData = new FormData(document.getElementById("fileForm"));
       axios({
           method: 'post',
      	   //文件下载,后台返回文件流
           responseType: 'blob',
           url: "请求地址",
           data: formData,
           headers: {
               //文件上传
               "Content-Type": "multipart/form-data"
           },
           onUploadProgress: function (e) { //原生获取上传进度的事件
               if (!e.lengthComputable) {
                   console.log("不支持");
                   return;
               }

               //计算进度
               var percent = (e.loaded / e.total * 100).toFixed(0);
               console.log("上传进度:" + percent + "%");

               if(parseInt(percent) == 100) {
                   console.log("上传完成");
               }
           },
       }).then(response => {
          //动态创建一个a标签
          let link  = document.createElement("a");
          link.href = window.URL.createObjectURL(new Blob([response.data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"}));
          link.target = "_blank";
          link.download = newName;
          document.body.appendChild(link);
          //点击a标签
          link.click();
          //最后移除a标签
          document.body.removeChild(link);
       });
   }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值