首页 > 其他分享 >[Uniapp] APP拍照后转换Base64上传

[Uniapp] APP拍照后转换Base64上传

时间:2024-11-06 11:46:23浏览次数:1  
标签:Uniapp resolve url res APP Base64 file uni

组件(2选1):

1. uni-file-picker : https://uniapp.dcloud.net.cn/component/uniui/uni-file-picker.html

2. u-upload : https://uviewui.com/components/upload.html

 

思路:

不想直接把图片存到数据库,因为想着图片是小文件,也不是重要文件,干脆存到数据库里就好了。

因此,计划在前端上传图片的时候,转成arraybuffer之类的,再存到数据库里,表设计的字段为byte[] , 在MSSQL中类型为Image

 

过程:

实际传参的时候,用的是JSON对象(要传很多参数,如果只有文件数据还好说,用FormData传过去),结果arraybuffer,Uint8Array都传不过去,也用了下FormData的方式,都不行,应该说是不懂怎么用。

后来想着传Base64过去,但需要用string类型字段先接收,在后端把string转成byte[] (C#里的Convert.FromBase64String()方法)

 

在 u-upload的@afterRead="afterRead"方法里用e.tempFilePaths[0]开始转换Base64 , 或者在 uni-file-picker 的@select="select"方法里用lists[i].url开始转换Base64.

select(e) {
   console.log('选择文件:', e)
   // e.tempFilePaths[0]
} 

afterRead(event) {
    // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
    let lists = [].concat(event.file)
    for (let i = 0; i < lists.length; i++) {
        // lists[i].url
        }       
}   

一开始在电脑上用浏览器的方式测试,转换Base64,能够正常运行, 后来到APP上一试,发现不行了,点击拍照后确定,回到界面时没有把图片加载到控件里。

                return new Promise((resolve, reject) => {
                    uni.request({
                        url: url,
                        method: 'GET',
                        responseType: 'Arraybuffer',
                        success: res => {
                            console.log(res)
                            let base64 = uni.arrayBufferToBase64((res.data))
                            resolve(base64)
                        },
                        fail: (e) => {
                            reject(e)
                        }
                    })
                })

最后在网上找到了CompressImage方法,终于成功了。

                return new Promise((resolve, reject) => {
                    // #ifdef H5
                    uni.request({
                        url: url,
                        method: 'GET',
                        responseType: 'Arraybuffer',
                        success: res => {
                            console.log(res)
                            let base64 = uni.arrayBufferToBase64((res.data))
                            resolve(base64)
                        },
                        fail: (e) => {
                            reject(e)
                        }
                    })
                    // #endif


                    // #ifdef APP
                    uni.compressImage({
                        src: url,
                        quality: 100,
                        success: (res) => {
                            const tempUrl = res.tempFilePath
                            plus.io.resolveLocalFileSystemURL(tempUrl, (entry) => {
                                entry.file((e) => {
                                    let fileReader = new plus.io.FileReader();
                                    fileReader.onload = (r) => {
                                        console.log(r.target.result)
                                        resolve(r.target.result)
                                    }
                                    fileReader.readAsDataURL(e)
                                })
                            })
                        },
                        fail: (e) => {
                            reject(e)
                        }
                    })
                    // #endif

                })

 

标签:Uniapp,resolve,url,res,APP,Base64,file,uni
From: https://www.cnblogs.com/WikiChen/p/18529698

相关文章

  • 采用uni-app开发圈子系统源码小程序,含PHP完整后端系统,成品源码部署搭建适用于APP+小程
    采用uni-app开发圈子系统源码小程序,含PHP完整后端系统,成品源码部署搭建适用于APP+小程序+H5兴趣社区交友圈子系统小程序源码搭建开源社区圈子系统圈子社区系统源码多端圈子社区论坛系统 线下活动兴趣圈子交友搭子系统源码即时通信社交圈子系统系统主要基于uniapp前端技术,后......
  • 【可白嫖源码】03115智能房屋租赁app(案例分析)
    摘  要    近年来,随着城市化进程的不断推进,房屋租赁市场需求不断增长。然而,传统的房屋租赁方式存在诸如信息不对称、交易不透明等问题,用户对于便捷、透明和个性化的房屋租赁服务需求逐渐凸显,因此,智能房屋租赁App应运而生。该App旨在整合现代技术,提供智能化、便捷化......
  • uni-app小程序(抖音)text组件使用踩坑
    前情uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是主推uni-app。坑位最近在开发一个需求,就是一段文本,其中有些文本需要做特殊标签样式显示,而对于文本我一般习惯性用text组件包裹。但今天不知......
  • .net文件转Base64
    看publicclassFileUtil{///<summary>///文件转换成Base64字符串///</summary>///<paramname="fileName">文件绝对路径</param>///<returns></returns>publicstaticStringFileToBase64(stringfil......
  • springboot关爱老人App-计算机毕业设计源码32708
    目 录摘要1绪论1.1开发背景和意义1.2开发技术1.2.1Android开发工具1.2.2Springboot框架1.2.3MySQL数据库1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1用户注册流程2.2.2用户登录流程2.2.3数据删除流程2.3系......
  • python+flask计算机毕业设计高校学生课堂考勤打卡APP的设计和实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高校学生课堂考勤的研究,现有研究多集中在传统点名方式的改进以及基于单一技术的考勤系统开发。例如,有的研究专注于利用蓝牙技术实......
  • node基于微信小程序的养老驿站服务平台(源码+vue+uinapp+部署文档等)
    收藏关注不迷路!!......
  • python+flask计算机毕业设计好骑行打卡园app系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容好骑行打卡园app系统毕业设计相关内容一、选题背景关于骑行打卡类APP的研究,现有研究主要以骑行记录和路线规划为主,专门针对骑行打卡园这种集打卡......
  • ECON5094 Applied Microeconomics
    ECON5094TopicsinApplied MicroeconomicsAssessment1.Youare requiredto presenttwo papersofyour choice, andfor one ofthese papers write anextended referee report.2. Each presentation hasweightof 15% (30%total)ofthefinalgrad......
  • 【Azure App Service】使用Microsoft.Office.Interop.Word来操作Word文档,部署到App Se
    问题描述在.NET项目中,使用Microsoft.Office.Interop.Word组件来操作Word文档,使用了Microsoft.Office.Interop.Word.Document对象中的Open和SaveAs方法。##打开文件doc=app.Documents.Open(refinputFile,refnullobj,refnullobj,refnullobj,refnullobj,refnullobj,......