uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器

news2024/10/6 10:38:10

前言

  • 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能。

  • 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseImage,uni.uni.uploadFile

  • 它和pc端原理差不多,都是file对象上传,PC端是通过new file对象,uni-app是直接提供了

自己理解

1.uni.chooseImage是uni-app提供调用手机拍摄从相册选择获取图片的api

2.uni-file-picker文件上传是uni-app封装上传图片和文件的组件,它包含uni.chooseImage这个api

3.uni.uploadFile()是uni-app为了弥补原生uni.request缺陷,可以直接写文挡服务器地址

4.uni-file-picker文件上传默认是我们有上传空间uniCloud,所以属性中没有设置上传属性

5.至于什么是上传空间uni-app在创建项目时有选择,没有上传空间借助uni.uploadFile()上传文档服务器

5.最终我们用uni-file-picker文件上传(包含uni.chooseImage)+ uni.uploadFile()就可以实现这个功能

注意点

1.如果uni-app项目是没有上传空间的化,uni-file-picker文件上传这几个事件是不会触发的

 

2.uni.chooseImage-api返回值

文档写的是tempFiles就是一个File对象,直接把这个里面0项当参数可能会报错,正确是

const tempFilePaths = e.tempFiles[0].file;

3.uni.uploadFile()发送请求时,

3.1它会跟axios一样会在外面帮我们包一层data,取值时候需要多写一个data(res.data.data)

3.1它的返回结果时一个json格式字符串,需要转换成js对象,不转换值是灰色并且取不出来

 

4.uni-file-picker文件上传,通过:value="fileLists"回显时候需要注意必须要有3个值

 

5.文档和很多文档都说没有上传空间时候需要手动上传,其实不用专门写个按钮使用手动上传

5.1手动上传只是获取图片一样在点击按钮时候,在上传,没有实质性作用,不用专门写手动上传

5.2就算我们没有绑定上传空间,也不用手动上传直接选择图片它就会触发@select="select" 配合uni.uploadFile()上传即可

6.效果图

 

 

代码事项

1.在form表单中-uni-forms编写上传组件代码-uni-forms

title不写的化右边 0/9 上传图片限制不会出现

<uni-forms-item label="">
    <uni-file-picker limit="9" :value="fileLists" title="维修单据"                                 :image-styles="imageStyles"
        :sourceType="sourceType" @select="select"                                                 @progress="progress" @success="success"
        @fail="fail" @delete="deletea" />
</uni-forms-item>

2.data中变量

// 图片回显
fileLists: [],
// 上传图片的样式
imageStyles: {
        width: 90,
        height: 90,
        },
// uni.chooseImage值,从相册选择,拍摄
sourceType: ['album', 'camera'],

3.method事件

// 获取上传状态
            select(e) {
                console.log('选择文件:', e)
                // 解决file对象取值问题
                const tempFilePaths = e.tempFiles[0].file;
                uni.uploadFile({
                    url: '文档服务器地址',
                    // 要上传文件对象
                    file: tempFilePaths,
                    文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
                    name: 'file',
                    // 请求头设置
                    // 我们是需要token和用户id登录时存从uni-app数据存储中取
                    header: {
                        "token": uni.getStorageSync('token'),
                        "tenant-id": uni.getStorageSync('tenant-id')
                    },
                    // 成功函数
                    success: (res) => {
                        // uni.uploadFile默认在外面包了一层data
                        console.log('上传成功', res.data);
                // uni.uploadFile返回来的结果默认是JSON格式字符串,需要用JSON.parse转换成js对象
                        console.log('上传数据转换',JSON.parse(res.data));
                        // 取到文档服务器的值
                        let uploaddata = JSON.parse(res.data)
                        let x = {}
                        // 下面3个值是uni-app规定的一个不能少
                        x.url = uploaddata.url
                        x.extname = ''
                        x.name = uploaddata.filename
                        this.fileLists.push(x)
                    },
                    // 失败提示用户重新上传
                    fail: error => {
                        console.log('失败', error);
                    }
                })
            },
            // 获取上传进度
            progress(e) {
                // 没有上传空间,不会执行 
                console.log('上传进度:', e)
            },
​
            // 上传成功
            success(e) {
                // 没有上传空间,不会执行 
                console.log('上传成功')
            },
​
            // 上传失败
            fail(e) {
                // 没有上传空间,不会执行 
                console.log('上传失败:', e)
            },
            // 删除
            deletea(e) {
                console.log('删除图片', e);
            },

总结:这是试过了成功的,不要直接复制一步一步来,出了问题一步一步看,不要急,不要给误导了。

经过这一趟流程下来相信你也对 uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5年测试经验,测试老鸟总结功能测试——全测试点覆盖

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 功能测试主要包括…

使用vscode编写并运行typescript代码

1.安装vsCode Visual Studio Code - Code Editing. Redefined 2.安装nodejs 下载 | Node.js 中文网 3.打开vscode&#xff0c;在vscode里面打开终端&#xff08;快捷键是ctrl~) 查看是否成功安装node和npm&#xff1a; node -v npm -v 在终端中输入如下命令并…

ELK详细安装配置

1.安装jdk1.8&#xff08;略&#xff09; 2.安装配置本机防火墙&#xff08;略&#xff09; 3.ELK版本选择 参考&#xff1a;支持一览表 | Elastic 选择支持java8的版本 4.版本6安装 root依次用户执行 wget https://artifacts.elastic.co/downloads/elasticsearch/elast…

C++基础(1)——程序内存模型和引用

前言 本文主要介绍了C中内存模型的四区及存放的数据&#xff0c;引用的基本语法。 1.1&#xff1a;代码区&#xff08;程序运行前&#xff09; 1&#xff1a;存放CPU执行的机器指令 2&#xff1a;代码区是共享的&#xff0c;共享的目的是对于频繁被执行的程序&#xff0c;只…

在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

第3章 作业(268EF)【网络安全】

第3章 作业【网络安全】 前言推荐第3章 作业268EF如何不用计算机计算求模 最后 前言 2023-6-19 15:49:17 以下内容源自《网络安全》 仅供学习交流使用 推荐 第2章 作业&#xff08;2456&#xff09;【网络安全】 第3章 作业 2 3.2什么是MAC? MAC&#xff1a;消息认证码…

网页设计实习周记范文5篇(合集)

网页设计实习周记(一) 本周主要是做网站维护更新。 网站要注意经常维护更新内容&#xff0c;保持内容的新鲜&#xff0c;不要一做好就放在那儿不变了&#xff0c;只有不断地给它补充新的内容&#xff0c;才能够吸引住浏览者。 通过目前的实习&#xff0c;在设计方面我感觉自己有…

探究设备管理系统在工业领域的应用

在现代工业领域&#xff0c;设备是生产过程中至关重要的组成部分。有效管理和维护设备对于保障生产的连续性、提高生产效率和降低成本至关重要。而设备管理系统的引入为企业提供了一种综合性的解决方案&#xff0c;能够全面监控、维护和优化设备的运行状态。本文将探讨设备管理…

Linux MySQL 备份与恢复 日志管理

数据库备份 备份策略 完全备份 每次备份都备份完整的数据库。 备份数据最大&#xff0c;每次都要完整备份。但是恢复最方便差异备份 只备份上一次完全备份后的更新数据。 第一次完整备份&#xff0c;之后备份第一次没有备份的内容增量备份 每次备份只备份上一次完全备份或增量备…

终于!Ubuntu下水“不可变”!

来源丨51CTO技术栈&#xff08;ID&#xff1a;blog51cto&#xff09; 要说今年Linux哪个概念火&#xff1f;肯定少不了“不可变”。Ubuntu也终于按捺不住了。 就在6月初&#xff0c;Ubuntu的母公司Canonical宣布&#xff1a;将很快加入不可变的发行版潮流。 虽然一开始Snap的首…

Spring学习笔记——从配置文件到注解开发 创建对象+成员变量赋值 增强方法

目录 引出Spring入门案例初识Spring入门案例1----用配置文件实现 Druid JDBCTemplate dao1.之前的方式&#xff1a;new对象2.用配置文件的方法把new对象交给Spring3.如果要用对象&#xff0c;从spring的容器中获取ac.getBean("userDao");4.实体类和dao层的代码--问…

【Leetcode60天带刷】day11栈与队列——20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

题目&#xff1a; 20. 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个…

ARM存储器概论

一、ARM指令集概述 1.指令集 指令 &#xff08;1&#xff09;能够指示处理器执行某种运算的命令称为指令&#xff08;如加、减、乘 ...&#xff09; &#xff08;2&#xff09;指令在内存中以机器码&#xff08;二进制&#xff09;的方式存在 &#xff08;3&#xff09;每…

奉加微电子蓝牙芯片SDK例程怎么用

摘要&#xff1a;本文以定时器例程为例&#xff0c;介绍奉加微电子蓝牙芯片PHY6222的例程怎么样打开&#xff0c;怎么样编译&#xff0c;怎么样烧录。 硬件如上图&#xff0c;软件使用了两个&#xff0c;一个是keil5&#xff0c;另一个是PhyPlusKit&#xff08;奉加微电子的烧录…

直到我买了服务器才知道有个自己的服务器有多爽!

一、我为什么要买服务器 我在大学时候就买了一个自己的小服务器&#xff0c;其实就是电视盒子刷的centos&#xff0c;当时还花了两百多大洋呢&#xff01;当时那个服务器只是用来放自己的博客&#xff0c;但是那个服务器性能太垃圾了&#xff0c;也就只能放个网页了&#xff0…

《向量数据库》——Milvus 数据迁移指南

目录 Milvus 数据迁移指南 第 1 步&#xff1a;关闭当前版本 Milvus 第 2 步&#xff1a;下载配置文件 第 3 步&#xff1a;确认、更新 MySQL/SQLite 服务端地址 第 4 步&#xff1a;下载并启动新版 Milvus 第 5 步&#xff1a;安装对应版本的 Python SDK 第 6 步&#…

数据库表的操作

目录 前言 1.创建表 2.查看表 2.1查看表结构 2.2查看表中插入的数据 3.修改表 4.删除表 总结 前言 前面已经介绍了对数据库的操作&#xff0c;今天我们介绍的是数据库表的操作&#xff0c;数据库表简单可以理解为存储数据的介质。有了这个认识之后&#xff0c;下面我们…

[保姆级] Vue3 开发文档

大家好&#xff0c;我是沐华。最近一个粉丝公司项目由 Vue2 升级到 Vue3 了&#xff0c;他一下子不适应&#xff0c;有好多不会用的&#xff0c;所以我就写了这篇开发文档&#xff0c;包含了 Vue3 项目开发中使用的所有语法&#xff0c;希望所有像他一样还不熟的伙伴快速上手 V…

电子版个人简历模板范文十篇

电子版个人简历模板范文篇1 基本信息 真实姓名&#xff1a;__性别&#xff1a;男 年龄&#xff1a;25岁身高&#xff1a;170CM 婚姻状况&#xff1a;未婚户籍所在&#xff1a;贵州盘县 学历&#xff1a;中专工作经验&#xff1a;1-3年 联系地址&#xff1a;贵州贵阳 求职意向 最…

不是吧,你们对交换机的误解也太深了!

我的网工朋友大家好。 交换机和路由器系列&#xff0c;在我们这个公众号里可谓是C位选手&#xff0c;写过的内容有很多&#xff0c;从0基础小白都看得懂的趣味解读&#xff0c;到老网工最爱的实用命令&#xff0c;一应俱全。 但是好像从来没分析过&#xff0c;关于交换机&…