使用Vant搭建的H5页面移动端无法上传图片问题

<div class="van-cell van-field">
    <div class="van-cell__title van-field__label">头像:</div>
    <div class="van-cell__value van-field__value">
       <div class="van-field__body">
       <van-uploader
       v-model="fileList"
       :max-count="1"
       :after-read="afterRead"
       multiple
       >
       <van-image width="100" height="100" :src="this.path + avatarOn" />
      </van-uploader>
    </div>
  </div>
</div>

具体的原因是因为在van-uploader组件中加了一个属性multiple所导致的,这里我们可以去看一下Vant的官网给出了答案如下图:

第一个是accept你需要去做相应的文件处理,如果你加了不去处理也会导致出现移动端上传图片失败,

第二个是multiple 官方文档上给出了详细解释,我使用安卓手机是上传失败的,苹果手机去试了试是可以的,所以大致的原因就是这两点。

还有一部分代码可以参考

data() {
    return {
      fileList: [], //头像上传文件数据
      avatarOn: "", //头像回显字段
    };
  },
//图片上传
afterRead(file) {
  //此时可以自行将文件上传至服务器
  const loading = Toast.loading({
  forbidClick: true,
  text: "上传中,请稍候...",
  });
  // 创建Canvas对象(画布)
  let canvas = document.createElement("canvas");
  // 获取对应的CanvasRenderingContext2D对象(画笔)
  let context = canvas.getContext("2d");
  // 创建新的图片对象
  let img = new Image();
  // 指定图片的DataURL(图片的base64编码数据)
      img.src = file.content;
      // 监听浏览器加载图片完成,然后进行进行绘制
      img.onload = () => {
        var newWidth = img.width * 0.7; //压缩后图片的宽度
        var newHeight = img.height * 0.7; //压缩后图片的高度
        // 指定canvas画布大小,该大小为最后生成图片的大小
        canvas.width = newWidth;
        canvas.height = newHeight;
        /* drawImage画布绘制的方法。(0,0)表示以Canvas画布左上角为起点,400,300是将图片按给定的像素进行缩小。
        如果不指定缩小的像素图片将以图片原始大小进行绘制,图片像素如果大于画布将会从左上角开始按画布大小部分绘制图片,最后的图片就是张局部图。*/
        context.drawImage(img, 0, 0, newWidth, newHeight);
        // 将绘制完成的图片重新转化为base64编码,file.file.type为图片类型,0.92为默认压缩质量
        file.content = canvas.toDataURL(file.file.type, 0.7);
        //调用后端上传接口
        uploadAccountApi(file)
          .then((res) => {
            this.userForm.avatar = res.fileName;//可以把上传到服务器的图片值给了你所要保存的Form表单中的头像字段可以实现保存头像
          })
          .finally(() => {
            loading.close();
          });
      };
    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于移动H5登录页面的Vue2实现,可以参考Vue-Mobile这个项目。Vue-Mobile是基于Vue-cli实现的移动H5开发模板,已经搭建好了基本的开发框架,可以帮助您快速开发移动H5应用。项目使用的技术栈包括Vue、Vux、Axios和Less,并且提供了功能丰富的模板代码。您可以在该项目的GitHub地址找到源码。 另外,如果您想使用Vue.js3版本来实现移动H5登录页面,可以考虑使用基于Vue.js3和TypeScript脚本的手机H5框架。该框架使用Vant UI界面(兼容公众号和小程序),并且封装了网络交互单元和Axios拦截等功能,以便简化开发流程。该框架的目标是设计一个简单、易用的移动手机App[2]。 参考资料: Vue-Mobile项目源码地址:https://github.com/Michael-lzg/vue-mobile 手机H5框架基于Vue.js3版本的简单登录页面实现<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [详解搭建一个vue-cli的移动H5开发模板](https://download.csdn.net/download/weixin_38730201/13135443)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [简单好用的移动H5框架,Vue3、TypeScript,VantUI界面,OneMobileWeb](https://download.csdn.net/download/sky56it/19838982)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值