当前位置: 首页 > news >正文

【小程序上传图片封装2024,支持多图,带进度,上传头像】

import config from './config';// 支持多图,显示进度
export function uploadImages(count = 1, sourceType, onLoading = null, showProgress = false, fileKey = 'file') {return new Promise((resolve, reject) => {wx.chooseMedia({count: count, // 可以选择的图片数量sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图sourceType, // 可以指定来源是相册还是相机success: (chooseResult) => {console.log('chooseResult', chooseResult);const tempFilePaths = chooseResult.tempFiles;const uploadPromises = tempFilePaths.map((filePath, index) => {const baseUrl = (env == 'pro' || !env) ? config.BASE_URL : config.DEV_URL;const param = 'demo';const formData = {...param,sign: signStr,};console.log('filePath:', filePath, 'name:', fileKey, 'formData', formData);return new Promise((resolve, reject) => {const uploadTask = wx.uploadFile({url: `${baseUrl}${config.UPLOAD_URL}`,filePath: filePath.tempFilePath,name: fileKey,header: {"Content-Type": "multipart/form-data"},formData: {data: JSON.stringify(formData)},success: (uploadResult) => {console.log(uploadResult);if (uploadResult.statusCode === 200) {const data = JSON.parse(uploadResult.data);if (returnLocation) {resolve(data);return;}resolve(data.url);} else {console.error(`Upload failed with status code ${uploadResult.statusCode}`);reject(new Error(`Upload failed with status code ${uploadResult.statusCode}`));}},fail: (error) => {console.error('Upload failed:', error);reject(error);}});if (showProgress) {uploadTask.onProgressUpdate((res) => {console.log(`File ${index + 1} progress: ${res.progress}%`);if (onLoading) {onLoading(`上传中... ${res.progress}%`);}});}});});if (onLoading) {onLoading('上传中...');}Promise.all(uploadPromises).then((results) => {console.log('上传成功-----', results);if (onLoading) {onLoading(null); // 传递 null 表示隐藏 loading}resolve(results);}).catch((error) => {if (onLoading) {onLoading(null); // 传递 null 表示隐藏 loading}wx.showToast({title: '上传失败',icon: 'none'});reject(error);});},});});
};// 上传头像,支持裁剪,小程序自带功能
<button data-type="avatar" open-type="chooseAvatar" bindchooseavatar="handleAvatarChoose">
// 对应js
handleAvatarChoose(e) {uploadAvatar(e.detail.avatarUrl).then((url) => {console.log('上传成功,返回内容是:', url);this.setData({ avatar: url });}).catch((error) => {console.log(`图片上传失败--${JSON.stringify(error)}`);});},// 封装的上传
export function uploadAvatar(avatarUrl) {return new Promise((resolve, reject) => {const param = {nonce: getNum(),timestamp: new Date().getTime() + '',token: wx.getStorageSync('token') || '',userid: wx.getStorageSync('userid') || '',};const env = wx.getStorageSync('env');const baseUrl = (env == 'pro' || !env) ? config.BASE_URL : config.DEV_URL;const formData = {...param,sign: signStr,};console.log('filePath:', avatarUrl,  'formData', formData);wx.uploadFile({url: `${baseUrl}${config.UPLOAD_URL}`,filePath: avatarUrl,name: 'file', // 后台要绑定的名称header: {'Content-Type': 'multipart/form-data',},formData: {data: JSON.stringify(formData),},success: function (res) {if (res.statusCode === 200) {try {const data = JSON.parse(res.data);resolve(data.url); // 假设返回的数据中包含图片的 URL} catch (error) {console.error('JSON parse error:', error);reject(new Error('JSON parse error'));}} else {console.error(`Upload failed with status code ${res.statusCode}`);reject(new Error(`Upload failed with status code ${res.statusCode}`));}},fail: function (error) {console.error('Upload failed:', error);reject(error);}});});
};

相关文章:

【小程序上传图片封装2024,支持多图,带进度,上传头像】

import config from ./config;// 支持多图&#xff0c;显示进度 export function uploadImages(count 1, sourceType, onLoading null, showProgress false, fileKey file) {return new Promise((resolve, reject) > {wx.chooseMedia({count: count, // 可以选择的图片数…...

[A-14]ARMv8/ARMv9-Memory-内存模型的类型(Device Normal)

ver0.1 [看前序文章有惊喜。] 前言 前面花了很大的精力把ARM构建的VMSA中的几个核心的议题给大家做了介绍,相信大家已经能够理解并掌握ARM的内存子系统的工作原理大致框架。接下来我们会规划一些文章,对ARM内存子系统的一些细节做一下介绍,使ARM的内存子系统更加的丰满。本…...

驾校管理系统|基于java和小程序的驾校管理系统设计与实现(源码+数据库+文档)

驾校管理系统平台 目录 基于java和小程序的驾校管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#…...

@Mapper使用中遇到的问题解法汇总

最近终于有时间写点代码相关的文章了&#xff0c;工作真的太忙了&#xff0c;果然又要测试又要开发的人最&#x1f402;&#x1f434;。 1.查询数据库有数据&#xff0c;但是代码中写select语句的时候查出为null Select("SELECT * FROM xx_manager order by id limit 1&q…...

深度学习:YOLO V3 网络架构解析

引言 YOLO V3&#xff08;You Only Look Once Version 3&#xff09;是YOLO系列算法的第三个版本&#xff0c;相比之前的版本&#xff0c;它在多个方面进行了优化和改进&#xff0c;不仅提升了检测精度&#xff0c;还保持了较快的检测速度。本文将详细介绍YOLO V3的主要改进以…...

SpringCloudAlibaba-Sentinel-熔断与限流

版本说明 <spring.boot.version>3.2.0</spring.boot.version> <spring.cloud.version>2023.0.0</spring.cloud.version> <spring.cloud.alibaba.version>2023.0.1.2</spring.cloud.alibaba.version>是什么 能干嘛 面试题 服务雪崩 安装使…...

mysql中的mvcc理解

是什么&#xff1a;MVCC指的是在读已提交、可重复读这两种隔离级别下的事务在执行普通的select操作时&#xff0c;访问记录的版本链的过程&#xff0c;可以使不同事务的读写操作并发执行&#xff0c;提高性能。 MVCC 隐藏字段 undo log 版本链 ReadView 1.隐藏字段&#xf…...

ETF申购赎回指南:详解注意事项与低费率券商推荐!

​ETF 申购&赎回 ETF申购赎回是个啥业务&#xff1f; 01 ETF申购、赎回是一种交易委托方式&#xff0c;指投资者通过申购方式(买入方向)获得ETF份额&#xff0c;通过赎回的方式&#xff08;卖出方向&#xff09;换掉/卖出ETF份额。ETF申购&#xff0c;通常是通过一篮子成…...

List<T>属性和方法使用

//author&#xff1a;shark_ddd using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//使用函数来减少长度namespace List_T {class Student{public string Name { get; set; }public int Age { get; set; …...

记一次:使用使用Dbeaver连接Clickhouse

前言&#xff1a;使用了navicat连接了clickhouse我感觉不太好用&#xff0c;就整理了一下dbeaver连接 0、使用Navicat连接clickhouse 测试连接 但是不能双击打开&#xff0c;可是使用命令页界面&#xff0c;右键命令页界面&#xff0c;然后可以用sql去测试 但是不太好用&#…...

Java面向对象编程进阶(四)

Java面向对象编程进阶&#xff08;四&#xff09; 一、equals()方法的使用二、toString()方法的使用三、复习 一、equals()方法的使用 适用性&#xff1a;任何引用数据都可以使用。 自定义的类在没有重写Object中equals()方法的情况下&#xff0c;调用的就是Object类中声明的…...

【51单片机】第一个小程序 —— 点亮LED灯

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 单片机介绍LED灯介绍练习创建第一个项目点亮LED灯LED周期闪烁 单片机介绍 单片机&#xff0c;英文Micro Controller Unit&#xff0…...

如何通过自动化有效地简化 Active Directory 操作?

我们都知道规模稍微大一点的企业为了便于计算机的管理&#xff0c;基本都上了微软的AD域控制器。 那么肯定就会存在这么一个问题&#xff0c; 不断的会有计算机加入或者是退出域控制器&#xff0c;批量的创建、修改、删除AD域用户&#xff0c;如果企业的架构需要改变&#xff…...

Java-POI导出EXCEL(动态表头)

1、主要功能 导出excel&#xff0c;表头有固定的和动态的。动态表头之间不能穿插固定表头。 2、使用方法 引入下方两个工具类&#xff0c;定义excel固定表头类。调用方法即可。 调用方法&#xff1a; ExcelDynamicHeader<MajorNameChangeReport> ledgerSafetyProblemEx…...

利用 Direct3D 绘制几何体—9.流水线状态对象

到目前为止展示过编写输入布局描述、创建顶点着色器和像素着色器&#xff0c;以及配置光栅器状态组这 3 个步骤。接下来讲如何将这些对象绑定到图形流水线上&#xff0c;用以实际绘制图形。大多数控制图形流水线状态的对象被统称为流水线状态对象&#xff08;Pipeline State Ob…...

【开源项目】libfaketime安装、使用——小白教程

项目 Github&#xff1a;GitHub - wolfcw/libfaketime: libfaketime modifies the system time for a single application libfaketime安装 01.切换路径&#xff0c;目标路径&#xff1a;/usr/local &#xff08;在/usr/local路径下git clone 开源项目) 切换路径指令: cd …...

java.util.concurrent包

java.util.concurrent包是Java中用于并发编程的重要工具集&#xff0c;提供了丰富的并发原语和组件&#xff0c;以简化多线程编程的复杂性&#xff0c;并帮助开发者编写高效、可伸缩和线程安全的并发程序。其主要功能包括以下几个方面&#xff1a; 一、线程池和任务执行框架 …...

Django创建项目模块+创建映射类+视图

确保你的项目已经正确链接数据库 链接数据库的工具有很多,数据库的种类也有很多&#xff0c;我使用的数据库是mysql&#xff0c;工具是pmysql&#xff0c;使用pymysql链接数据库&#xff0c;在settings文件中这么设置&#xff1a; DATABASES {# default: {# ENGINE: dja…...

使用AMD GPU和LangChain构建问答聊天机器人

Question-answering Chatbot with LangChain on an AMD GPU — ROCm Blogs 作者&#xff1a;Phillip Dang 2024年3月11日 LangChain是一个旨在利用语言模型强大功能来构建前沿应用程序的框架。通过将语言模型连接到各种上下文资源并基于给定的上下文提供推理能力&#xff0c;L…...

2024年808数据结构答案

1.已知带头结点单链表&#xff0c;H为头指针。设计一个算法&#xff0c;查找到链表的第m个结点(不包含头结点)&#xff0c;并将元 素值为X的结点插入到该结点后&#xff0c;形成一个新的链表。 // 定义单链表节点结构 typedef struct Node {int data;struct Node* next; } Nod…...

解锁Navicat密码:突破加密限制的开源解密工具

解锁Navicat密码&#xff1a;突破加密限制的开源解密工具 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 当数据库连接密码被Navicat加密保存却无法记起&…...

Kali 2023最新版安装Fluxion避坑指南:从git clone到镜像源全流程

Kali 2023最新版安装Fluxion避坑指南&#xff1a;从git clone到镜像源全流程 如果你正在学习网络安全渗透测试&#xff0c;Fluxion绝对是一个值得掌握的Wi-Fi安全审计工具。作为Kali Linux生态中最受欢迎的无线网络测试套件之一&#xff0c;它通过智能化的交互界面让复杂的攻击…...

Vitis自定义IP编译报错?手把手教你修复Makefile路径问题(附完整代码)

Vitis自定义IP编译报错&#xff1f;手把手教你修复Makefile路径问题&#xff08;附完整代码&#xff09; 最近在Vitis中导入包含自定义IP的XSA文件时&#xff0c;不少开发者遇到了令人头疼的编译错误——"xxx.h: No such file or directory"。这个看似简单的报错背后…...

AI时代当程序员?2026年转行IT的“新活法”

早知道AI会让程序员干这个&#xff0c;当年说啥也不信 凌晨三点&#xff0c;老刘瞪着AI生成的2000行代码&#xff0c;这已经是他熬夜修复的第47个bug了。 AI一分钟写完的模块&#xff0c;他调了三天。最绝的是——每修好一个bug&#xff0c;AI都能“贴心”地再送出三个新bug作为…...

Illustrator批量替换实战指南:用ReplaceItems释放设计效率

Illustrator批量替换实战指南&#xff1a;用ReplaceItems释放设计效率 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是不是经常在Illustrator中遇到这样的场景&#xff1a;需要…...

VLSI设计实战:手把手教你用SPICE模型搭建9种基础电路(附完整代码)

VLSI设计实战&#xff1a;手把手教你用SPICE模型搭建9种基础电路&#xff08;附完整代码&#xff09; 在集成电路设计的浩瀚宇宙中&#xff0c;SPICE模型就像工程师手中的瑞士军刀。我第一次接触SPICE仿真时&#xff0c;面对密密麻麻的网表文件完全不知所措——直到导师扔给我一…...

【国家级等保2.0工业网关合规缺口】:3步完成Python网关安全基线加固(含GB/T 22239-2024映射表)

第一章&#xff1a;工业Python网关安全基线合规总览工业Python网关作为OT与IT融合的关键枢纽&#xff0c;承担着协议转换、数据采集、边缘计算与远程控制等核心职能。其安全基线合规性直接关系到生产系统的可用性、完整性与保密性。依据IEC 62443-3-3、等保2.0三级及NIST SP 80…...

Python办公自动化:用PyMuPDF+pdfplumber一键提取PDF文字/图片/表格(附完整代码)

Python办公自动化实战&#xff1a;PyMuPDF与pdfplumber高效提取PDF三要素 每天面对堆积如山的PDF文档&#xff0c;行政和财务人员最头疼的莫过于手动复制粘贴文字、截图保存图片、重新绘制表格。我曾见过一位财务同事为了处理200份供应商报价单&#xff0c;连续加班一周手工录入…...

LeetCode 53. 最大子数组和 超详细题解(贪心+分治+动规)

LeetCode 53. 最大子数组和 超详细题解&#xff08;贪心分治动规&#xff09; &#x1f3f7;️ 标签&#xff1a;动态规划、贪心算法、分治法、数组、经典面试题 &#x1f4ca; 难度&#xff1a;简单 | &#x1f4dd; 题目编号&#xff1a;53 | &#x1f5c2;️ 题型&#xff1…...

Z-Image-Turbo-rinaiqiao-huiyewunv 复杂场景生成挑战赛获奖作品赏析

Z-Image-Turbo-rinaiqiao-huiyewunv 复杂场景生成挑战赛获奖作品赏析 最近&#xff0c;我花了不少时间研究社区里的一场AI图像生成挑战赛&#xff0c;主题是“复杂场景生成”。参赛者们用的是一个叫Z-Image-Turbo-rinaiqiao-huiyewunv的模型&#xff0c;名字有点长&#xff0c…...