美文网首页
vue 利用input "file" 上传功能

vue 利用input "file" 上传功能

作者: 前端陈陈陈 | 来源:发表于2020-10-21 16:29 被阅读0次

最近公司一个需求是:用户上传excel 表格时候,后端根据状态判断是上传还是 上传excel 还是导出excel 表格;如果是上传,那么接口会返回json 数据,如果是下载,接口会返回二进制数据流让前端处理下载。这样一个需求自然element 组件无法满足需求了,只能自己动手丰衣足食了。

//html 代码
   <form id="upload" enctype="multipart/form-data" method="post">
            <label for="fileinp">
              <input type="button" id="btn" value="批量发货" />
              <input
                type="file"
                id="fileinp"
                ref="referenceUpload"
                name="file"
                accept=".xls, .xlsx"
                @change="uploadPic"
              />
            </label>
          </form>
//css
label {
  position: relative;
}
#fileinp {
  position: absolute;
  left: 0;
  top: 0;
  opacity: 0;
}
#btn {
  margin-right: 5px;
  background: #0068b7;
  border-color: #0068b7;
  color: #fff;
  width: 100px;
  height: 40px;
  border: 1px solid #dcdfe6;
}
#text {
  color: red;
}
//js
  uploadPic() {
      let that = this;
      var form = document.getElementById("upload"),
        formData = new FormData(form);
      let url = "  ";
      this.$axios
        .axiose({
          url: url,
          data: formData,
          method: "post",
          responseType: "blob"
        })
        .then(result => {
          if (result.type == "text/html") {
            const reader = new FileReader();
            reader.onload = function() {
              let info = JSON.parse(reader.result);
              if (info.code == 200) {
                that.$message({
                  message: info.msg,
                  type: "success"
                });
                that.getorders();
                that.$refs.referenceUpload.value = null;
              } else {
                that.$message({
                  message: info.msg,
                  type: "warning"
                });
                that.$refs.referenceUpload.value = null;
              }
              that.loading = false;
            };
            reader.readAsText(result);
          } else if (result.type == "applicationnd.ms-excel") {
            const content = result;
            const blob = new Blob([content]);
            if ("download" in document.createElement("a")) {
              //支持a标签download的浏览器
              const link = document.createElement("a"); //创建a标签
              link.download = `订单.xlsx`;
              link.style.display = "none";
              link.href = URL.createObjectURL(blob);
              document.body.appendChild(link);
              link.click(); //执行下载
              URL.revokeObjectURL(link.href); //释放url
              document.body.removeChild(link); //释放标签
              this.$refs.referenceUpload.value = null;
            } else {
              //其他浏览器
              navigator.msSaveBlob(blob, `订单.xlsx`);
              this.$refs.referenceUpload.value = null;
            }
          }
        })
        .catch(err => {
          console.log(err);
        });
    },

相关文章

  • vue 利用input "file" 上传功能

    最近公司一个需求是:用户上传excel 表格时候,后端根据状态判断是上传还是 上传excel 还是导出excel ...

  • H5 Android文件上传

    直接利用file input实现上传,浏览器和Android下都可以正常使用 基于vue的头像上传 Android...

  • 基于vue(2.X)写一个简单的图片上传预览的功能

    这里我没有用vue的组件库,是单纯靠input来写出一个图片上传的功能。思路是:先用input[type=file...

  • input file上传图片预览其实很简单

    input file上传图片预览其实很简单。今天小编就通过本文给大家介绍input file上传 图片预览功能的实...

  • 2018-05-23

    图片上传 form上传 ajax上传 FileReader 利用FileReader对象,将input中的file...

  • 图片上传和预览

    通过input:file来实现图片预览和上传的功能 input:file accept属性,表示接受的文件类型,默...

  • 前端实现图片上传预览转换base64

    前端实现文件的上传,就必须用到input标签,type属性为file。在vue项目中通ref操作dom。input...

  • upload

    多文件上传并预览 利用input 的type='file" 可以实现文件的上传,不过只支持单个文件上传。只有给in...

  • input

    input file - 文件上传

  • 上传文件功能

    通过form表单与input来实现上传功能,type=file实现上传框,enctipart确认数据格式,meth...

网友评论

      本文标题:vue 利用input "file" 上传功能

      本文链接:https://www.haomeiwen.com/subject/zqremktx.html