vue处理文件流实现上传下载

1.文件流转base64

         axios({
            method: "post",
            url: "************",
            responseType: "blob", //必须将返回数据格式更改为 blob 格式
          }).then(res => {
          // 处理返回的文件流数据转为blob对象
            let blob = new Blob([res.data], { type: "image/jpeg" }); 
              filetoBase64(blob).then(res => {
              //此时的 res 是返回处理后文件的base64编码
              this.avatarImg = res;
            });
          });


//文件转 base64
export const filetoBase64 = file => {
  let reader = new FileReader(); //实例化文件读取对象
  reader.readAsDataURL(file); //将文件读取为 DataURL,也就是base64编码
  return new Promise((reslove, reject) => {
    reader.onload = e => {
      //文件读取成功完成时触发
      let dataURL = e.target.result; //获得文件读取成功后的DataURL,也就是base64编码
      reslove(dataURL);
    };
  });
};

2.文件下载

// (1)利用window.open("文件地址")
	      windows.open() 
// (2)利用 a 标签
		  const link = document.createElement('a');
          const blob = new Blob([res.data]);
          link.style.display = 'none';
          link.href = URL.createObjectURL(blob);
          link.download = "这是文件名";//设置下载文件名
          document.body.appendChild(link);
          link.click();
    	  URL.revokeObjectURL(blob) //释放URL

3.文件上传

    <input type="file" class="fileInp" style="display:none" @change="fileChange" />

    fileChange(event) {
      let file = event.target.files[0]; //获取上传的文件
      let forms = new FormData() //创建表单对象,因为文件上传必须以表单形式上传
      forms.append('multipartFile', file) //追加上传的文件
      forms.append('name','xiaoming' ) //其他附加的数据
      axios({
        url: process.env.VUE_APP_BASE_API + "/OfficeWorkerMng/BapMember/uploadLrm",
        method: "post",
        data: forms,
      }).then(res => {
        this.$message.success("上传成功");
      })
    },
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传: 1. 在 template 中添加一个 input 标签,设置 type 为 file,用于选择要上传的文件。 ``` <template> <div> <input type="file" @change="handleUpload"> </div> </template> ``` 2. 在 methods 中添加 handleUpload 方法,获取选中的文件,使用 FormData 将其传递给后端。 ``` methods: { handleUpload(event) { const file = event.target.files[0] const formData = new FormData() formData.append('file', file) axios.post('/upload', formData) .then(response => { console.log(response) }) .catch(error => { console.log(error) }) } } ``` 3. 后端接收到文件后进行处理,返回上传成功的信息。 文件下载: 1. 在 template 中添加一个 button 标签,用于触发下载操作。 ``` <template> <div> <button @click="handleDownload">下载文件</button> </div> </template> ``` 2. 在 methods 中添加 handleDownload 方法,使用 axios 发送 GET 请求,将文件返回给前端,使用 blob 对象将其下载到本地。 ``` methods: { handleDownload() { axios({ method: 'get', url: '/download', responseType: 'blob' }) .then(response => { const blob = new Blob([response.data]) const fileName = response.headers['content-disposition'].split('filename=')[1] const link = document.createElement('a') link.href = window.URL.createObjectURL(blob) link.download = fileName link.click() }) .catch(error => { console.log(error) }) } } ``` 3. 后端接收到下载请求后返回文件,使用 Content-Disposition 响应头指定文件名。 ``` app.get('/download', (req, res) => { const filePath = path.join(__dirname, 'file.txt') const fileName = 'file.txt' res.setHeader('Content-Disposition', 'attachment; filename=' + fileName) const fileStream = fs.createReadStream(filePath) fileStream.pipe(res) }) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值