uni-app vue打包app 上传图片问题

uni-app vue打包app 上传图片问题

开发环境 版本号 项目创建方式
HBuilderX 3.1.13

示例代码:

<input type=“file” ref=“clearFile” style=“display:none” @change=“uploadImg($event)” class=“add-file-right-input” accept=“image/png,image/jpeg,image/gif,image/jpg” />

uploadPortrait(flag) { console.log("=====flag======", flag); this.uploadFlag = flag; this.$refs.clearFile.click(); //上传文件 }, uploadImg(e) { console.log("====ee====", e); let file = e.target.files || e.dataTransfer.files; //target事件 // let docObj = document.getElementById(“file”); console.log("=======file=====", file); // console.log("=======file===111==", docObj.files); this.uploadBackstage(file); // this.$refs.clearFile.value = “”; //上传文件后重置 }, uploadBackstage(files) { let formData = new window.FormData(); formData.append(“userId”, this.userId); formData.append(“type”, 1); // let mainUrls = “http://120.26.91.101/api/daikin/userPublicInfo/upload”; // let imgPath = “”; for (let i = 0; i < files.length; i++) { formData.append(“multipartFile”, files[i]); // imgPath = this.getUrl(files[i]); console.log("====getUrl===", files[i].name); } upload(formData) .then(res => { this.$refs.clearFile.value = “”; console.log(“res===”, this.uploadFlag); if (this.uploadFlag === 1) { this.form.portrait = res.body.url; } else if (this.uploadFlag === 2) { this.form.backgroundPortrait = res.body.url; } console.log("====this.form.portrait====", this.form.portrait); }) .catch(() => { this.$refs.clearFile.value = “”; }); }


### 操作步骤:


- 点击上传图片

预期结果:

  • 图片上传成功

### 实际结果:


- 接口报错

bug描述:

通过


更多关于uni-app vue打包app 上传图片问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app vue打包app 上传图片问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中,使用<input type="file">的方式上传图片在Web端可行,但在打包成App时会出现兼容性问题。这是因为App环境(特别是Android和iOS)对文件输入控件的支持有限,且安全策略不同。

推荐使用uni-app官方提供的uni.chooseImage API替代原生input方式:

uploadPortrait(flag) {
  this.uploadFlag = flag;
  uni.chooseImage({
    count: 1,
    sizeType: ['original', 'compressed'],
    sourceType: ['album', 'camera'],
    success: (res) => {
      const tempFilePaths = res.tempFilePaths;
      this.uploadBackstage(tempFilePaths);
    }
  });
}

uploadBackstage(filePaths) {
  uni.uploadFile({
    url: '你的上传接口地址',
    filePath: filePaths[0],
    name: 'multipartFile',
    formData: {
      userId: this.userId,
      type: 1
    },
    success: (res) => {
      const data = JSON.parse(res.data);
      if (this.uploadFlag === 1) {
        this.form.portrait = data.body.url;
      } else if (this.uploadFlag === 2) {
        this.form.backgroundPortrait = data.body.url;
      }
    },
    fail: (err) => {
      console.log('上传失败', err);
    }
  });
}
回到顶部