关于实现微信小程序一次性上传多张图片所遇到问题的解决方案

微信小程序实现多张图片的一次性上传,删除,预览,点击按钮上传至云存储 实现功能 实现从本地文件中一次选择上传多张图片 长按可删除图片 单击可预览图片 点击按钮上传至小程序云平台的云存储中(自行借鉴) 应用场景 租售、分享、交友等平台中图片的选择与上传 代码实例 效果图 .wxml文件 <text class="word-class">上传图片实例:</text> <!--以下为图片选择--> <view class... 阅读详情
    关于微信小程序的上传图片,网上有很多实现方案,本文主要参考https://blog.youkuaiyun.com/lili625/article/details/77783300该博文,主要针对使用过程中遇到的问题做以简单的说明。
          首先简单介绍一下,实现方式:
                java后台实现代码如下:
 /**
     * 图片上传
     *
     * @return
     * @throws Exception
     */
    //@ExcLoginInterceptor 自定义的拦截器注解
    @RequestMapping(value = "/upload",produces = "application/json;charset=utf-8")
    @ResponseBody
    public String uploadPicture(HttpServletRequest request) throws Exception{
        String message = IConstants.Response_S.FAILED;
        //获取文件需要上传到的路径
        String path = request.getServletContext().getRealPath("/upload")+"/";
        File dir = new File(path);
        if (!dir.exists()) {
            dir.mkdir();
        }
        try {
            request.setCharacterEncoding("utf-8");  //设置编码
            //获得磁盘文件条目工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();

            //如果没以下两行设置的话,上传大的文件会占用很多内存,
            //设置暂时存放的存储室,这个存储室可以和最终存储文件的目录不同
            factory.setRepository(dir);
            //设置缓存的大小,当上传文件的容量超过该缓存时,直接放到暂时存储室
            factory.setSizeThreshold(1024 * 1024);
            //文件上传处理
            ServletFileUpload fileUpload = new ServletFileUpload(factory);
            List<FileItem> list =fileUpload.parseRequest(request);
            FileItem picture = null;
            for (FileItem item : list) {
                //获取表单的属性名字
                String name = item.getFieldName();
                //如果获取的表单信息是普通的 文本 信息
                if (item.isFormField()) {
                    //获取用户具体输入的字符串
                    String value = item.getString();
                    request.setAttribute(name, value);
                } else {
                    picture = item;
                    //根据当前时间生成图片的名称(需要自己封装写方法--当然也可以按自己的规则生成图片名称)
                    String pictureName = DateTool.dateToMS_Str(new Date()).replaceAll(" ","").replaceAll("-","").replaceAll(":","").replace(".","");
                    //自定义上传图片的名字
                    String fileName = pictureName+".jpg";
                    String destPath = path + fileName;
                    //此处可以保存与数据库,代码省略……    
                    //真正写到磁盘上
                    File file = new File(destPath);
                    OutputStream out = new FileOutputStream(file);
                    InputStream in = picture.getInputStream();
                    int length = 0;
                    byte[] buf = new byte[1024];
                    // in.read(buf) 每次读到的数据存放在buf 数组中
                    while ((length = in.read(buf)) != -1) {
                        //在buf数组中取出数据写到(输出流)磁盘上
                        out.write(buf, 0, length);
                    }
                    message=IConstants.Response_S.SUCCESS;
                    in.close();
                    out.close();
                }
            }

        } catch (FileUploadException e1) {
            logger.error("", e1);
            message=IConstants.Response_S.FAILED;
        } catch (Exception e) {
            logger.error("", e);
            message=IConstants.Response_S.FAILED;
        }
        return message;
    }
                小程序代码如下:
                ① 上传图片具体实现:
uploadimg: function (data) {
    var that = this,
    i = data.i ? data.i : 0,
    success = data.success ? data.success : 0,
    fail = data.fail ? data.fail : 0;
    wx.uploadFile({
      url: data.url,
      filePath: data.path[i],
      name: 'file',
      formData: {
        //此处可以传自定义参数……
      },
      header: {
        "Content-Type": "multipart/form-data",
        //"sessionId": getApp().globalData.sessionId,
      },
      success: (resp) => {
        success++;
      },
      fail: (res) => {
        fail++;
      },
      complete: () => {
        i++;
        if (i == data.path.length) {   //当图片传完时,停止调用
          wx.showToast({
            title: '上传成功',
            duration: 1500,
            mask: 'false'
          })
          that.setData({
            tempFilePaths: []
          })
        } else {//若图片还没有传完,则继续调用函数
          data.i = i;
          data.success = success;
          data.fail = fail;
          that.uploadimg(data);
        }
      }
    });
  },
                ②上传图片
data: {
    tempFilePaths:[],
},
upload:function(e){
    var pics = this.data.tempFilePaths
    //调用上传图片的具体实现
    this.uploadimg({
      url: config.serverUrl + '/upload',
      path: pics,//这里是选取的图片的地址数组
    });
},
      代码亲测可实现,下面简单就运用上述代码所遇到的问题做以简单介绍。
           问题1.后台使用如下代码,获取的list为空,即获取不到前端传过来的数据。
            ServletFileUpload fileUpload = new ServletFileUpload(factory);
            List<FileItem> list =fileUpload.parseRequest(request);

                解决方案:如果后台使用springMVC搭建的,就需要将springMVC的配置文件中的文件上传配置删掉,即把如下的配置删除。

<!-- 文件上传 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--<property name="defaultEncoding" value="UTF-8"/>-->
        <!-- 设置上传文件的最大尺寸为5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>
           问题2.在真机环境中,图片不能上传。
                出现该问题,你先检查小程序的后台配置中是否配置了 uploadFile合法域名,如下图的标注中应该有合法的小程序的响应域名。
                                    


微信小程序--图片相关问题合辑 图片上传相关文章 微信小程序多张图片上传功能 微信小程序开发(二)图片上传 微信小程序上传一或多张图片 微信小程序实现选择图片九宫格带预览 ETL:微信小程序之图片上传 微信小程序wx.previewImage预览图片 微信小程序之预览图片 小程序开发:上传图片到腾讯云 .NET开发微信小程序-上传图片到服务器 微信小程序本地图片处理-- 阅读详情

相关推荐

K230开发板实战:YOLOv8n模型部署全流程(附常见报错解决方案)

本文详细介绍了在K230开发板上部署YOLOv8n模型的完整流程,包括模型选型、配置文件优化和运行时调优。特别针对常见的'生成部署文件异常'等问题提供了实用解决方案,帮助开发者高效完成嵌入式AI模型的部署与优化。

g8f9d0s1a2的博客 1048

微信小程序图片上传组件

注意:示例中的路径和文件名仅供参考,实际开发中的路径和文件名请根据自己的项目结构和需求进行调整。 通过以上步骤,你就可以封装一个图片上传组件并在小程序中使用了。用户在页面中点击上传按钮时,会弹出选择图片的对话框,选择图片后会将图片上传到指定的服务器地址,并将上传成功后的图片地址保存到组件内部的图片列表中。用户可以通过点击图片删除按钮来删除已上传的图片。

Lyq2017901206的博客 1226

3dMax效率翻倍!用Octopus章鱼插件打造你的专属快捷菜单(附MaxScript入门指南)

本文详细介绍了如何利用Octopus插件和MaxScript脚本在3dMax中打造高效快捷菜单,显著提升三维建模与动画制作的工作效率。通过饼状菜单系统、自动化宏录制和脚本控制,用户可实现个性化工作流,节省大量操作时间。文章还提供了MaxScript入门指南,帮助开发者快速掌握这一强大工具。

weixin_30920853的博客 152

小程序批量上传照片(一次最多上传9张)

注意: 由于目前新版开发者工具创建的小程序目录文件结构问题,npm构建的文件目录为miniprogram_npm,并且开发工具会默认在当前目录下创建miniprogram_npm的文件名,所以新版本的miniprogramNpmDistDir配置为'./'即可。设置 mutiple 为 true 时,选择完图片,以递归的方式通过wx.uploadFile上传图片。强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱。回调函数,获取到对应的文件的临时地址,然后再使用。选项,构建完成后,即可引入组件。

peachban的博客 2877

如何使用JMeter进行大模型的压力测试?

使用JMeter进行大模型的压力测试,核心是通过模拟高并发请求,测试大模型在极限负载下的性能表现(如响应时间、吞吐量、错误率、资源瓶颈等)。通过以上步骤,可系统性评估大模型在高压下的性能极限,为优化模型(如量化、蒸馏)、扩容硬件(增加GPU)或调整接口限流策略提供数据依据。)、请求方式(POST)、认证方式(API Key放在Header)、请求参数(作用:避免瞬间高压压垮系统,更精准找到瓶颈点。等)、响应格式(同步/流式)。需获取:API地址(如。通过CSV文件引入不同。

alankuo的专栏 789

告别手动改图!用Python+PyWin32驱动SolidWorks,实现参数自动化修改(保姆级避坑指南)

本文详细介绍了如何利用Python和PyWin32驱动SolidWorks实现参数自动化修改,提供从环境配置到API连接的工业级解决方案。通过实战案例和避坑指南,帮助工程师高效搭建自动化脚本工作流,显著提升设计效率。

weixin_30614109的博客 742

微信小程序上传多张图片

微信小程序可以上传单张,多张,数量不超过一定数量。

qq_45208940的博客 2089

嘉立创EDA实战:4层板叠层设计避坑指南(附阻抗计算技巧)

本文详细解析了嘉立创EDA在4层PCB叠层设计中的实战技巧与避坑指南,涵盖经典叠层方案对比、介质厚度选择、电源系统设计及高速信号完整性优化。特别介绍了阻抗计算工具的应用,帮助工程师在高速电路设计中实现性能与成本的最佳平衡。

sea99的博客 965

微信小程序实现多张照片上传

实现微信小程序多张图片的上传与存储

code袁的博客 4278

OpenCV安装配置教程VS2022(超级顺利)

博主最开始没打算写这篇博客,只是想简单的在网上找一下最新版的OpenCV的安装配置教程,适用于VS2022的,但是我搜了一早上,也没搜到一个能让我成功安装配置的,看了很多很多文章,根本就没有几篇有用的。所以没办法了,只能自己研究了,于是就整理了这篇博客,希望能帮到和我一样的人,这就是博主一直信奉的利他精神!

weixin_47367099的博客 5万+

R语言Rstudio突然无法启动且报错:ERROR system error 42 [str: 一, len: 3, from: UTF-8, to: ISO8859-1]...如何解决

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2847

小程序 | 微信小程序实现图片是上传、预览功能

效果图 index.wxml <!-- 打开截图 开始 --> <view class="imageContainer"> <view class="imageFrame"> <view class="imageSingle" wx:for="{{imgs}}" wx:for-item="item" wx:key="*this"> <image class="imagePic" src="{{item}}"

ParallelLight 1977

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 232

uni-app app端文件多张上传

uploadImg() { uni.chooseImage({ success: (chooseImageRes) => { for (let i = 0; i <chooseImageRes.tempFiles.length; i++) { let obj = new Object(); obj.name = chooseImageRes.tempFiles[i].name; obj.uri = chooseImageRes.tempFiles[i].pa.

sinat_39648402的博客 3237

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

微信小程序实现图片上传

图片上传是常见功能,在微信小程序中怎么实现呢? 介绍两个api wx.chooseImage - 选择图片 从本地相机中选择图片 -wx.chooseImage(Object object) | 微信开放文档 上传-UploadTask | 微信开放文档 单张图片上传 wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], succe...

哆来A梦没有口袋的博客 5696

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

微信小程序使用图片转base64一次性提交多图片

微信小程序使用图片转base64一次性提交多图片前言前端代码后台代码总结 前言 大家都知道微信小程序提交图片只能一张一张的提交,如果需要一次性提交多张图片,那么一般的方法都是进行循环提交。那么使用图片转base64,然后后台再将base64转成图片就可实现一次性提交多张图片了。我使用的uniapp与php配合上传图片,话不多说,直接上代码。 前端代码 let images = []; var last = this.fileList.length - 1;//fileList 选择的图片数组 var _t

qq_27756989的博客 1075

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

微信小程序学习实录9:掌握wx.chooseMedia实现多图片文件上传功能(选择图片、预览图片、上传图片)

使用 wx.chooseImage API 可以让用户从相册或相机选择一张或多张图片。这个API可以设置用户可以选择的图片数量上限(默认9张)。

挖掘大数据价值,让决策者快速洞悉趋势,让大众读懂数据背后的故事。 2462

微信小程序上传图片到服务器并生成缩略图

因为近期公司计划做个摄影比赛,需要收集员工的照片作品,因为肯定是需要原图的,那样通过公司邮箱显然是不方便的,于是想到在小程序中添加图片上传功能,以前Sham用过每次添加1张图片,然后上传到服务器及数据库,趁这次机会,再次学习研究优化了代码,目前能够做到: 用户能一次性添加多张图片(原图),然后会展示出来(目前无法预览添加的图片,待继续优化),同时会弹窗提醒是否上传,确认则上传,取消则清空; 上...

shamqu的博客 8336

微信小程序云开发上传图片和下载图片并保存到相册操作

在微信小程序中,云开发上传并没有一个一次性上传多张图片的方法,只能通过将图片放在数组,然后通过操作数组的方式来一张一张的上传以及控制上传的图片` wx.cloud.uploadFile({ cloudPath: 'example.png', // 上传至云端的路径 filePath: '', // 小程序临时文件路径 success: res => { // 返回文件 ID console.log(res.fileID) }, fail: console.error

weixin_47077674的博客 4830

微信小程序 预览模式 uploadFile 失败(上传图片失败)

问题 微信小程序 开发者工具 和 debug 模式 上传图片没有问题,但是预览 和体验都有问题,恶心之处, 不要调试!! 解决方案 微信小程序有问题首先去社区里面看看。 uploadFile 合法域名没有添加!!!uploadFile 合法域名没有添加!!!uploadFile 合法域名没有添加!!! 顺便说声, 合法域名一个月只可以修改 5次, 一次性添加所有域名吧。 ...

palmer_kai的博客 6293

input在vue中如何一次性上传多张图片_免费图片转文字软件(免下载使用)

在这个社会进步节奏不断加快的年代,学会使用一些工具才能让我们的效率得以提升。而在各位的生活中,提取一张图片中的文字中的情况,想必都不会少见。那么如何才能摆脱手动打字,将一些图片中的文字给提取出来呢?其实,运用小编下面所提及的这些办法【微信小程序闪电识字、QQ截图识别】就可以做到了。这些办法可以通过图片上传,来助各位轻轻松松的实现图片转换成文字。精准识别文字信息,将识别的文字信息直接形成word,随...

weixin_40006965的博客 132

《移动端H5图片上传》

前言: 故事的开始要从接受的项目中说起,在用户的使用过程中,发现一个问题:使用安卓手机的用户无法再上传图片时进行拍照的选择,并且一次性无法上传多张照片,经过查阅资料发现:H5在实现图片上传是有兼容性问题 正文: 首先,在上传图片时不能进行拍照的选择,这个问题很容易解决,在代码中添加:accept=“image/*”,问题就解决了。 <input type...

杨晓风 迷迭香的记忆 484

近期微信小程序开发总结(4):上传文件wx.uploadfile(一个文案下同时上传多个文件)

在微信开发过程中遇到过一个问题,就是比如我们要做信息反馈的时候,一个文案可能需要配置多张图片一起发送,但是我们微信自带的wx.uploadfile只能一次上传一张,之前在网上查过一些资料,说可以用递归,但是可能有些小伙伴跟我一样,一开始的时候没能领悟到精髓,采用递归之后就是同一个文案搭配要上传的每一张图片单独成了一个反馈信息,这显然不是我们想要的。不过我最后还是用递归实现了.主要原理就是先用wx.uploadfile把要上传的文件全部先上传到服务器,然后服务器在返回拼接好的地址,再同文案一起用接口上...

weixin_46671666的博客 3872

微信小程序多文件上传并提交表单数据

问题描述 最近在做一个项目时微信小程序端需要上传多张图片,并且还需要提交数据。 后台的设计是图片与该数据的实体类是多对一关系,使用SpringDataJpa进行数据保存,因此需要图片和数据同时提交到服务端进行保存。 但微信小程序只提供了单文件上传,不满足我的需求 https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html wx.chooseImage({ success (res) {

a2667486939的博客 4101

微信小程序上传文件组件

微信小程序上传文件 一、说明 该拍照组件带有微信授权相机功能,会结合后端接口,将上传的图片以数组集合的形式传值给父级页面。 注意:组件适用于,单独上传图片,不携带参数,结合后端接口返回路径之后,再调用另外的保存接口,携带参数与图片提交的场景,请慎重使用。 支持功能 相册&相机拍照 可限制图片张数 可根据自己需求新增删除功能 可预览 缺陷 目前不支持删除 二、原理 由于wx.uploadFile一次性上传多张图片会报错,只能一张张的上传,所以封装的上传文件组件结合后端接口进行的是循环上传。废话

weixin_45947191的博客 2607
上一篇: 微信小程序中服务器主动向小程序多个客户端发送通知消息(模板消息)的解决方法
下一篇: ES6 新特性 总结
nirvana_cx
博客等级 码龄9年 13粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值