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

news/2024/10/9 16:13:16/文章来源:https://www.cnblogs.com/lsc-boke/p/18454502
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>
 onLoad () {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版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810594.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iPhone 16 Pro上百款充电头充电功率测试

一、苹果原装充电器测试截图: 以下所有测试均为“充电头网实验室”评测,且测试手机为最新的iPhone 16 Pro手机,充电线均为iPhone 16 Pro 最新的原装编织充电线,所以只有充电头是不同的,排除了其他因素的干扰。视频网站来自于B站: https://www.bilibili.com/video/BV1XixL…

如何用AI快速开发一个小程序?

从idea到上线,只花了2个小时,整个流程中,除了手动调整样式的数值,没有写一行代码,全部由AI能力,结合prompt帮助我完成。ChatGPT这个轰动全球的产品自问世以来,已经过了将近2年的时间,各行各业的精英们如火如荼的将AI能力应用到自己生产的产品中来。为分担人类的部分工作…

装酷就来这,秒变黑客精英的6个网站

有网友问:有没有装黑客,炫酷的网站? 回答:当然有。当黑客,门槛太高;装黑客,都是1秒钟的事情。下面介绍几个: 第一个:hackertyper 网址:https://hackertyper.net/ 随意输入文字,屏幕出现整齐的代码 这个是装酷首选,速度快,网页干净! 第二个:GEEKtyper 网址: ht…

webapi发布---问题解决

一. 127.0.0.1是回路地址,来检验本机TCP/IP协议栈,实际使用过程中服务端不在本机,是外部地址,要用IP地址测试。 外部用户采用IP+端口号访问,如下图浏览器访问不了,400错误。解决方案: 因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改…

virtualbox虚拟机的安装及xshell的连接

1.新建 填入虚拟机名字 虚拟机光盘为外部下载:https://openanolis.cn 点击下载点击第二个x86_64其他默认 2.设置 设置网络网卡 网卡1 网卡2 3.启动安装 一律默认 4.连接网络5.打开终端输入ip addr获取网络ip 6.打开xshell将ip地址输入到主机7.输入虚拟机用户名和密码即连接成功…

virtualbox虚拟机的安装

1.新建 填入虚拟机名字 虚拟机光盘为外部下载:https://openanolis.cn 点击下载点击第二个x86_64其他默认 2.设置 设置网络网卡 网卡1 网卡2 3.启动安装 一律默认 4.连接网络5.打开终端输入ip addr获取网络ip 6.打开xshell将ip地址输入到主机7.输入虚拟机用户名和密码即连接成功…

webapi测试例子

1. 修改WebApiConfig.cs中路由路径问题:webapi的默认路由并不需要指定action的名称(WebApi的默认路由是通过http的方法get/post/put/delete去匹配对应的action),但默认路由模板无法满足针对一种资源一种请求方式的多种操作。解决:打开App_Start文件夹下,WebApiConfig.cs …

LED显示驱动/高亮数显屏驱动芯片VK16K33A 采用SOP28封装形式,可支持16SEGx8GRID的点阵LED显示面板

VK16K33A是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,邱婷:188-2366-8825内部集成有数据 锁存器、键盘扫描、LED 驱动模块等电路。数据通过I2C通讯接口与MCU通信。SEG脚接LED阳 极,GRID脚接LED阴极,可支持16SEGx8GRID的点阵LED显示面板。最大支持133的按键。内…

PostgreSQL E转义字符

背景:多行数据作为select的where查询条件,数据库里直接找能找到,但select查询不到 数据AAA BBB CCC select ratmplid from certificates where privka = AAA BBB CCC ; 查询不到数据,修改如下 select ratmplid from certificates where privka = EAAA\nBBB\nCCC\n; 也可以借…

打通前后端流程,案例解读华为云开源低代码引擎解决方案

华为云在前端领域提供了DevUI Suites的场景级解决方案与打通前端与服务端的TinyEngine低码引擎,帮助开发者开发专业、设计统一的前端场景。本文分享自华为云社区《使用场景级前端解决方案及低代码引擎,助力开发者生产效能提升》,来源:《华为云DTSE》第五期开源专刊 当前前端…

GET代码的代码和公式

1. 数据及代码中的变量 初始化变量B: 存储每个 block(残基)的类型,来自 VOCAB.symbol_to_idx。 A: 存储原子的类型,来自 VOCAB.get_atom_global_idx() 和 block.to_data()。 X: 存储原子的坐标信息。 atom_positions: 存储原子位置的索引,用于进一步计算原子的几何信息。 …