vue移动端实现文件上传、下载、删除

14 篇文章 6 订阅
vue项目使用的插件vant,一个开发移动端很好用的组件

这个组件中自带了上传文件的方法,我们直接调用即可

<!-- 文件上传 -->
<van-form @submit="onSubmit" enctype="multipart/form-data">
  <van-uploader
    style="float: left;margin-left: 14px;margin-top: 15px;"
    v-model="fileList"
    accept="file"
   >
    <van-button size="small" icon="plus" type="primary">上传文件</van-button>
  </van-uploader>
</van-form>
  • fileList 是文件上传的列表,我们上传的文件会暂时存放在这里面。
  • accept 允许上传的文件类型,详细说明
  • onSubmit 提交的方法

文件上传方法

async onSubmit () {
  //创建一个formData对象,将要传的文件添加到里面
  let formData = new window.FormData();
  if(this.fileList.length > 0) {
  	//展示遮罩层
    this.show = true;
    for(let i = 0; i < this.fileList.length; i++) {
      //将文件添加到fromData中
      formData.append("file", this.fileList[i].file);
      //将文件传给后台的接口,设置请求头的类型为"multipart/form-data",不然后台可能获取不到。
      await this.$http.post('/aeo_smart/ICommonApi.do?saveFiles&orderno=' + this.id + '&type=chapApply', formData, { headers: { "Content-Type": "multipart/form-data" }})
      .then((response) =>{
        // 当请求成功
        if (response.data.issuccess === "success") {
          //清空formData
          formData.delete("file");
        }
      })
      .catch(function (error) {
        console.log(error);
      })
      .then(function () {
        // always executed
      });
    }
    //刷新展示页面
    this.onRefresh();
    //清空文件列表
    this.fileList = []
    setTimeout(() => {
      //关闭遮罩层
      this.show = false;
      //弹出提示
      Toast.success("上传成功");
    }, 1000);
  }
},

文件下载方法

  1. 文件下载,我这里后台接口是通过id去获取文件,前端调用请求,将要下载的文件id传给后台。
  2. 设置响应类型为responseType: ‘blob’,这里一定要定义,不定义为blob就拿不到文件流
  3. 将获取到的’blob’结合window.URL.createObjectURL()方法使用,window.URL.createObjectURL(blob)创建一个文件下载的路径,定义下载的文件名,使用document.createElement(‘a’)创建一个a标签,a.href=url(下载的文件地址),a.download = fileName(下载的文件名,自己定义的),调用a.click()点击方法,就会下载一个文件。
//下载文件
 downloadFile(file) {
   //请求后台接口
   this.$http.get('/aeo_smart/ICommonApi.do?viewFile_chapter', {
     params: {
       fileid: file.id,
       subclassname: file.subclassname,
       fid: file.id
     },
     responseType: 'blob'	//定义响应类型
   })
   .then((response) =>{
   	 //拿到文件blob
     let blob = response.data
     //定义下载文件名
     let fileName = file.attachmenttitle + "." + file.extend;
     //判断IE保存方法还是其他浏览器保存方法
     if ('download' in document.createElement('a')) {
       //将blob传出获取文件下载地址
       var url = window.URL.createObjectURL(blob);
       
       //定义一个a标签
       var a = document.createElement('a');

       a.style.display = 'none';
       //将下载地址赋值给a标签的href
      a.href = url;
      //将下载文件的名字赋值给a标签的download
      a.download = fileName;
      //添加到body中
       document.body.appendChild(a)
       //调用a标签的点击方法
      a.click();
       setTimeout(() => {
         window.URL.revokeObjectURL(url); // 释放URL 对象
         document.body.removeChild(a);	//移除a标签
       }, 1000);  //解决部分浏览器下载时“无此文件”问题

     } else {
       navigator.msSaveBlob(blob, fileName)
     }
   })
   .catch(function (error) {
     console.log(error);
   });
 },
}

文件删除方法

//删除文件
delFile(id) {
  //提示是否删除
  this.$dialog.confirm({
    message: '确定删除吗?',
  }).then(() => {
    //开启遮罩层
    this.show = true;
    //请求后台删除文件接口,通过文件id删除文件
    this.$http.get('/aeo_smart/ICommonApi.do?doDel', {
      params: {
        id: id
      }
    })
    .then((response) =>{
      // 当请求成功
      if (response.data.issuccess === "success") {
        //刷新页面
        this.onRefresh();
        setTimeout(() => {
          //关闭遮罩层
          this.show = false;
          //弹出提示
          Toast.success(response.data.result);
        }, 1000);
      }else {
      	//删除失败提示
        this.$notify(response.data.result);
      }
    })
    .catch(function (error) {
      console.log(error);
    })
    .then(function () {
      // always executed
    });
  });
},

下一篇: vue移动端实现图片预览

  • 0
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
根据引用\[1\]中的描述,你在项目中有两处下载图片的功能,一处是将base64格式的二维码图片下载到本地,另一处是将HTML页面生成的图片下载到本地。你最初按照PC浏览器上下载文件的方式完成了这个功能,但在手机端测试时发现点击下载按钮没有效果。经过搜索和尝试各种方法后,你发现手机端浏览器禁止下载base64格式的文件。最后,你被迫砍掉了下载功能。 根据引用\[2\]中的代码,你使用了`${this.baseUrl}/attache/downLoad/${data.id}?response-content-type=application/octet-stream`来生成下载链接。 综合以上信息,你想知道在Vue移动端如何选择下载文件的位置。 在Vue移动端,由于浏览器的限制,无法直接控制文件的下载位置。用户下载的文件会默认保存在浏览器的默认下载位置。如果你希望用户可以选择下载位置,你可以考虑使用第三方插件或库来实现这个功能。例如,你可以使用FileSaver.js来实现文件下载,并提供给用户选择下载位置的选项。 请注意,具体的实现方式可能会因你的项目需求和使用的插件而有所不同。你可以根据具体情况进行调整和实现。 #### 引用[.reference_title] - *1* *3* [关于vue移动端下载图片](https://blog.csdn.net/tianqingmuyu/article/details/123193313)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [vue移动端安卓(通过后端接口文件流)下载文件到本地](https://blog.csdn.net/weixin_49698648/article/details/125541993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值