UniApp文件上传(SpringBoot+Minio)

UniApp文件上传(SpringBoot+Minio)

一、Uni文件上传

(1)、文件上传的问题

UniApp文件上传文档

    uni.uploadFile({
        url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
        files: 图片地址对象数组,
        formData: {
            'user': 'test'
        },
        success: (res) => {
            console.log(res.data);
        }
    });

官方给出得使用方法,但是。。。图片对象数组要以key-value存储
name = 文件名称,uri = 文件地址路径
这样就会有一个问题,后端无法用数组或集合取值,因为官方说如果name一样或者不写

UniApp文件上传(SpringBoot+Minio)

那总不能写n个参数,后台用n个参数接把、很 cao单 的问题

(2)、解决思路

百度若干个小时,听了一堆一摸一样的屁话,找到一篇文章说 MultipartRequest,于是后台就用这个接参数,发现可以接到。

1、首先

uni拿到上传文件的图片地址数组对象,然后把他转成uni要求的key-value格式

    //把传过来的图片path数组转为指定格式
    var filelist = [];
    for (var i = 0; i < imgList.length; i++) {
        var obj = {};
        obj.name = "img" + i;
        obj.uri = imgList[i];
        filelist.push(obj)
    }

这样第一张图叫 img0 、、以此类推

2、发送请求

传给后端之前,告诉后端总共有几张图片要传过去

    uni.uploadFile({
        url: 'https://www.example.com/upload', //&#x4EC5;&#x4E3A;&#x793A;&#x4F8B;&#xFF0C;&#x975E;&#x771F;&#x5B9E;&#x7684;&#x63A5;&#x53E3;&#x5730;&#x5740;
        files: &#x4E0A;&#x8FB9;&#x7684;filelist,
        formData: {
            //&#x56FE;&#x7247;&#x5F20;&#x6570;
            'length': &#x4E0A;&#x8FB9;&#x7684;filelist.length
        },
        success: (res) => {
            console.log(res.data);
        }
    });

3、后端接参

上边说了,后端用MultipartRequest接收参数

    @PostMapping(value = "/upimg", headers = "content-type=multipart/form-data")
    @ApiOperation("多文件上传")
    public String upload(MultipartRequest request, Integer num) throws Exception {
        return Result.ok(this.MinioUtils.putObject(request, num));
    }

4、后端结合Minio的处理

上篇文章也说了 Minio 是怎么上传文件的

public List putObject(MultipartRequest request, Integer num) throws Exception {
        if (num == null || num < 1) {
            throw new CustomizeException(ErrorCode.UP_IMAGE_NUM_IS_NULL);
        }
        // bucket 不存在,创建
        if (!minioClient.bucketExists(this.bucket)) {
            minioClient.makeBucket(this.bucket);
        }
        InputStream inputStream;
        //返回的图片地址数组
        List imgList = new ArrayList<>();
        try {
            //循环多文件上传
            for (int i = 0; i < num; i++) {
                request.getFile("img" + i)//循环取文件并上传
                imgList.add(文件地址);
            }
        } catch (Exception ex) {
            throw new CustomizeException(ErrorCode.UP_IMAGE_ERROR);
        }
        return imgList;

5、uni处理返回结果

uni收到的返回结果是 String要做下处理才能使用

success: (res) => {
    JSON.parse(res.data);
}

二、文件上传的异步问题

uni的文件上传因为是异步,所以也要做些处理

export function upup(list) {
    //把传过来的图片path数组转为指定格式
    var filelist = [];
    for (var i = 0; i < list.length; i++) {
        var obj = {};
        obj.name = "img" + i;
        obj.uri = imgList[i];
        filelist.push(obj)
    }

    return new Promise((resolve, reject) => {
        //上传图片
        uni.uploadFile({
            url: 请求地址,
            files: filelist,
            formData: {
                'num': 图片张数
            },
            header: {
                "Content-Type": "multipart/form-data"
            },
            success: (res) => {
                //返回的是字符需要转json
                resolve(JSON.parse(res.data))
            },
            fail: (res) => {
                reject
            }
        })
    })
}

调用的时候

upup.then(res => {
    //在此处做处理,因为是异步所以此处的res只能在此处用
    //无法声明变量把res赋值给他
    //因为赋值完毕后res还没跑完
})

完~,百度一查一群篮子货在哪儿复制粘贴博客,几页的答案一摸一样,一群篮子货。如有需要转载,记得标明出处。

迷途者寻影而行

Original: https://www.cnblogs.com/pkkyh/p/16221828.html
Author: 迷途者寻影而行
Title: UniApp文件上传(SpringBoot+Minio)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575729/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Vmware 虚拟机连接外网和设置固定IP

    NAT 模式(地址转换模式) 在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,虚拟机借助NAT功能,通过…

    数据库 2023年6月14日
    097
  • Java 中的线程池

    为什么要用线程池 在 HotSpot VM 的线程模型中,Java 线程被一对一映射为内核线程。 Java 在使用线程执行程序时,需要调用操作系统内核的 API,创建一个内核线程,…

    数据库 2023年6月11日
    064
  • JavaScript进阶内容——BOM详解

    JavaScript进阶内容——BOM详解 在上一篇文章中我们学习了DOM,接下来让我们先通过和DOM的对比来简单了解一下BOM 首先我们先来复习一下DOM: 文档对象模型 DOM…

    数据库 2023年6月14日
    0149
  • 【Java代码之美】 — Java11新特性解读

    1.背景 美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。非常值得大家的关注,可以通过下面的地址进行下载: h…

    数据库 2023年6月6日
    092
  • 栈和队列数据结构

    栈和队列都是常用的数据结构。栈的应用非常的广泛,其原理也是非常经典的。 一、栈 ①栈(stack)又名堆栈,他是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这…

    数据库 2023年6月11日
    0117
  • java se 高级基础

    接口 继承树 Collection接口 Map接口 Collection 接口 Collection接口:单列集合,用来存储一个一个的对象 List接口:extends Colle…

    数据库 2023年6月16日
    086
  • MySQL约束

    约束 约束(constraint)概述 为什么要约束 为了保证数据完整性 什么是约束 对表中 字段的(强制)限制 约束的分类 角度一:字段个数 单类约束,多列约束 角度二:约束的作…

    数据库 2023年5月24日
    090
  • MySQL常用数据类型及细节

    类型 类型举例 整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT 浮点类型 FLOAT、DOUBLE 定点数类型 DECIM…

    数据库 2023年5月24日
    081
  • centos下安装myrocksdb

    承接上一篇,https://www.cnblogs.com/lunyu/p/10190364.html 。编译安装myrocks的整个过程,特别是第2步和第7步,让人冗长难耐。因此…

    数据库 2023年6月14日
    0108
  • 12、HSSFWorkbook实现多张sheet导出

    转载自 一、封装一个通用的装载数据的实体类: import lombok.AllArgsConstructor; import lombok.Data; import lombok…

    数据库 2023年6月6日
    0103
  • 商城限时秒杀功能系统

    我们在网购的时候常常会看到”限时””秒杀”等字眼,商家在产品的促销上除了发放优惠券,还喜欢用限时秒杀的方式, 让价格和原本的售价形成…

    数据库 2023年6月14日
    090
  • InnoDB 中不同SQL语句设置的锁

    锁定读、UPDATE 或 DELETE 通常会给在SQL语句处理过程扫描到的每个索引记录上设置记录锁。语句中是否存在排除该行的WHERE条件并不重要。InnoDB不记得确切的WHE…

    数据库 2023年6月14日
    0101
  • 第十七章 AOP编程

    1.AOP概念 AOP(Aspect Oriented Programing) 面向切面编程 = Spring动态代理开发 以切面为基本单位的程序开发,通过切面间的相互协同,相互调…

    数据库 2023年6月14日
    089
  • Android Studio的初次认识

    Android的初试 一、认识Android Studio 在我们新建项目的时候,会遇到这样的一个窗口,首先我们认识一下这些都是什么,这样我们才能够更好的进行下一步的学习! 这里的…

    数据库 2023年6月11日
    0117
  • 常用函数封装汇总

    常用函数封装 获取某日期若干个工作日后的日期 * &#x53C2;&#x6570;: * time: [String] &#x7ED9;&#x5B9…

    数据库 2023年6月11日
    0104
  • 类的加载流程

    概述 什么是类加载呢? 我们知道一个Class文件编译完成之后是存在于磁盘的一个普通文件,如果想要执行,必然需要将 Class&#x6587;&#x4EF6;加载到…

    数据库 2023年6月11日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球