UniApp文件上传(SpringBoot+Minio)

本文档介绍了如何使用uniApp进行文件上传,并与SpringBoot结合Minio实现后台接收。针对uniApp上传文件时遇到的key-value格式问题,提出了将图片路径数组转换为指定格式并利用MultipartRequest接收的解决方案。同时,文章还讨论了uniApp中文件上传的异步处理方法。
摘要由CSDN通过智能技术生成

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一样或者不写

image

那总不能写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', //仅为示例,非真实的接口地址
		files: 上边的filelist,
		formData: {
			//图片张数
			'length': 上边的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<String> 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<String> 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还没跑完
})

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Spring Boot与Minio的大文件上传并解压的功能,可以按照以下步骤进行操作: 1. 首先,在Spring Boot项目的pom.xml文件中引入Minio的依赖。可以使用以下代码将Minio的依赖添加到项目中: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.2.1</version> </dependency> ``` 2. 然后,将大文件分片并上传到Minio对象存储服务。可以按照以下步骤进行操作: - 将要上传的大文件进行分片处理,可以使用文件分片算法将大文件分成多个小块。 - 将分片后的文件依次上传到Minio对象存储服务,并指定一个临时文件名。 3. 分片上传完成后,将所有分片合并为一个完整的文件。可以按照以下步骤进行操作: - 从Minio中读取所有分片文件的流。 - 将分片流写入到一个临时文件中,以便后续解压。 4. 解压临时文件。可以按照以下步骤进行操作: - 使用合适的解压库或工具,对临时文件进行解压。 - 解压后的文件可以按需求进行进一步处理,例如再次上传到Minio或其他存储系统。 综上所述,要实现Spring Boot与Minio的大文件上传并解压功能,需要将文件分片并上传到Minio,然后将分片合并为完整文件,最后解压文件。这样可以实现大文件的上传和解压操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Spring boot + minio 分片上传](https://blog.csdn.net/XIAOTONGZHU/article/details/130346735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SpringBoot 使用 Minio 进行文件存储](https://blog.csdn.net/qq_43692950/article/details/125961685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Windows常用软件压缩包,后端Java适用于springboot 2.6.x等高版本](https://download.csdn.net/download/m0_55710969/85062866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值