首页 > 其他分享 >uniapp->开发APP的坑点,文件上传,选择方面

uniapp->开发APP的坑点,文件上传,选择方面

时间:2024-10-09 16:12:49浏览次数:10  
标签:uniapp 坑点 data APP avatarBase64 url res uni 上传

1.文件上传 uni.uploadFile 在H5端可以上传成功,在APP无法上传成功, 1.先检查url:必须是全路径,之前是

url: '/api/test' 所以上传不上去,
 
2,manifest配置权限
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>

 

     uni.uploadFile({
        url: config.baseUrl + '/api/test',
        filePath: file.url,
        header: {
          Authorization: uni.getStorageSync('authorization')
        },
        name: 'file',
        success: (uploadRes) => {
          let data = JSON.parse(uploadRes.data)
          if (data.status == 200) {
            uni.showToast({
              title: "上传成功",
              icon: 'none'
            })
            this.formFileLists[0] = {
              url: data.obj
            }
          } else {
            uni.showToast({
              title: data.message,
              icon: 'none'
            })
          }
        },
        fail: (err) => {

          // 处理上传失败的情况

        }

      });

3.多文件上传建议用

lsj-upload插件,主要记住accept,是原生弹框的时候,只弹相机,文件....这种控制
 // 限制允许上传的格式,空串=不限制,默认为空
      accept: 'image/*, application/msword, application/pdf',
      formats: '.txt,.png,.jpg,.mp4,.doc,.wps,.docx,.xls,.xlsx,.pdf',

4.用户上传图像,裁剪头像

info.vue

 <u-button size="medium" shape="circle" class="u-m-t-40" style="font-size:34rpx" @click="chooseAvatar">上传近期正面照</u-button>
 onl oad () {
    uni.$on('uAvatarCropper', path => {
      this.avatarBase64 = path;
      uni.uploadFile({
        url: config.baseUrl + '/api/convenient/person/uploadFile',
        header: {
          Authorization: uni.getStorageSync('authorization')
        },
        filePath: path,
        name: 'file',
        success: (res) => {
          let data = JSON.parse(res.data)
          let url = data.obj
          //获取到了远程图片后,上传图片
          let params = {
            userId: this.vuex_user.id,
            photoRecent: url
          }
          this.$u.api.leaveData.editPhotoRecent(params).then(res => {
            if (res.status == 200) {
              this.$u.api.user.getUserInfo(this.username).then(res => {
                if (res.status == 200) {
                  this.$u.vuex('vuex_user', res.obj);
                  //this.$store.dispatch('start');
                  // uni.setStorageSync('userInfos', JSON.stringify(res.obj));
                  uni.showToast({
                    title: "上传成功",
                    icon: 'none'
                  })
                }
              });

              // uni.setStorageSync('userInfos', JSON.stringify(res.obj));
            }
          });
          console.log('data', data.obj)
        },
        fail: (err) => {
          console.log("upload fail",err)
        }
      });
      // if (this.avatarBase64 != '' && !this.avatarBase64.startsWith('data:')) {
      //   // #ifdef APP-PLUS
      //   let self = this, fileUrl = this.avatarBase64;
      //   plus.io.resolveLocalFileSystemURL(path, function (entry) {
      //     entry.file(function (file) {
      //       var fileReader = new plus.io.FileReader()
      //       fileReader.onload = function (data) {
      //         // console.log(data.target.result);
      //         self.avatarBase64 = data.target.result;
      //       }
      //       fileReader.onerror = function (error) { }
      //       fileReader.readAsDataURL(file)
      //     }, function (error) { })
      //   }, function (error) { });
      //   // #endif
      //   // #ifndef APP-PLUS
      //   this.avatarBase64 = 'data:image/jpeg;base64,' + uni.getFileSystemManager()
      //     .readFileSync(this.avatarBase64, "base64");
      //   // #endif
      // }
      console.log('选完了', path)
    })
  },
chooseAvatar () {
      this.$u.route({
        url: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',
        params: {
          destWidth: 800, // 输出图片宽高
          rectWidth: 200, // 裁剪框的宽高
          fileType: 'jpg', // 输出的图片类型,如果'png'类型发现裁剪的图片太大,改成"jpg"即可
        }
      })
    },
View Code

pages.json

{
      "path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper",
      "style": {
        "navigationBarTitleText": "头像裁剪",
        "navigationBarBackgroundColor": "#000000"
      }
    },

用的

uview-ui 1.x版本

标签:uniapp,坑点,data,APP,avatarBase64,url,res,uni,上传
From: https://www.cnblogs.com/lsc-boke/p/18454502

相关文章

  • (2024最新毕设合集)基于SpringBoot的乡村书屋小程序-31881|可做计算机毕业设计JAVA、PHP
    摘要随着信息技术的快速发展和互联网的广泛普及,数字化服务的需求不断增长,乡村书屋作为传统的文化服务机构也需要适应这一变革。本研究将使用Java开发技术,通过springboot作为框架,结合微信小程序,和MySQL作为数据存储的技术,开发一套功能齐备可移动的乡村书屋小程序,旨在提升乡......
  • IntelliJ IDEA(IDEA)下无法解析 ApplicationContext 中的方法 getBean
    只需要:删除过程目录下的.idea文件后,关闭IDEA,再重新打开IDEA即可解决“getBean”报红问题。(注意:前提是要保证有依赖(Spring核心库配置正确、依赖版本兼容)、配置正确(ApplicationContext 创建正确、有 Bean定义、扫描包正确)、编码问题(导入正确的类、方法调用正确))以上原理:.i......
  • springboot+vue基于app的农产品销售系统的设计与实现【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,移动互联网已成为连接消费者与商家的关键桥梁。在农产品销售领域,传统销售模式面临着信息不对称、流通成本高、销售范围受限等问题。近年来,随着智能手机和移动互联网的普及,越来越多的消费者倾向于通过手机应用程......
  • 在线问诊APP开发,开启智慧医疗新模式
    随着互联网医疗的不断发展,患者对线上问诊的需求逐渐增加。为了满足市场需求,提供便捷、高效的在线问诊服务。现在很多医院和诊所都着手互联网医院智慧医疗系统,利用在线问诊APP解决了医院每天要面对大量患者,医疗资源紧张,患者等待时间较长等难题,提高了患者就诊的体验,缓解了医院和......
  • 在线问诊APP开发,开启智慧医疗新模式
    随着互联网医疗的不断发展,患者对线上问诊的需求逐渐增加。为了满足市场需求,提供便捷、高效的在线问诊服务。现在很多医院和诊所都着手互联网医院智慧医疗系统,利用在线问诊APP解决了医院每天要面对大量患者,医疗资源紧张,患者等待时间较长等难题,提高了患者就诊的体验,缓解了医院和......
  • 创建新的 App 页面
    完整的页面创建过程包括三个步骤:在layout目录下创建XML文件创建与XML文件对应的Java代码在AndroidManifest.xml中注册页面配置实现两个Activity相互跳转的代码:MainActivity:packagecom.example.myapplication1;importandroidx.appcompat.app.Ap......
  • uniapp启用蓝牙
    <template> <viewclass="container"> <buttonclass="btn"@click="startBluetoothDevicesDiscovery">搜索蓝牙设备</button> <viewclass="device-list"> <viewv-for="(device,index)i......
  • python小程序个性化服装搭配系统的设计与实现uniapp+flask
    目录项目介绍具体实现截图开发者工具介绍技术路线性能/安全/负载方面开发语言以及框架介绍python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取项目介绍个性化服装搭配方面的任务繁琐,以至于每年都在个性化服装搭配这方面投入较多的精......
  • uniapp开发App和h5,项目二期开发中总结的一些小技巧
    1.建议优先nvue开发,先把app端做出来,再去适配h5端。对于不太复杂的页面,一般使用nvue同时兼容app和h5就好了,一个nvue页面的好处就是后续版本迭代更新修改一个页面就行。就是适配的时候有些费事,但用熟练了也还好,总是能找到一些技巧的。2.app端不支持部分H5标签,所以优先使用nvue原......
  • [论文阅读报告] Fast 2-Approximate All-Pairs Shortest Paths, SODA '24
    本篇文章介绍\(\tildeO(n^{2.032})\)的无向无权图全源最短路stretch2近似算法和\(\tildeO(n^{\frac94})\)的组合算法,以及\(\tildeO(n^{2.214}(1/\epsilon)^{O(1)}\logW)\)的非负整数边权stretch\((2+\epsilon)\)近似算法。其中\((1/\epsilon)^{O(1)}\)......