【uniapp】上传附件+Java后端

一、背景

移动端项目使用uniapp开发,项目有上传附件的需求。现在分享给大家,一起进步

二、前端

关键代码:

复制代码
uni.chooseFile({
	type: "all",
	count: this.count,
	success: res => {
		let len = 0;
		res.tempFiles.forEach((item, index) => {
			len++;
			let info = {
				filename: item.name,
				filepath: item.path,
				filetype: this.fileHz(item.name),
				file: item
			}
			let flag = /\.(doc|docx|xls|xlsx|ppt|pdf|zip|rar|jpg|png|jpeg)$/
				.test(
					item.name.toLowerCase())
			//双重保证
			if (this.size <= info.file.size) {
				this.$toast("文件最大不超过2M");
				return
			}
			if (flag) {
				this.upload(material, info, index1);
			} else {
				this.$toast("请选择.doc、.docx、.xls、.xlsx、.ppt、.pdf、.zip、.rar格式文件")
				return
			}
		})
	},
	fail: err => {
		console.log(err);
	}
});

/* 截取后缀名 */
fileHz(name) {
	//获取最后一个.的位置
	var index = name.lastIndexOf(".");
	//获取后缀
	var ext = name.substr(index + 1);
	return ext
},

发送请求接口:

复制代码
upload(material, info, index) {
	const formData = new FormData();
	if (!info) {
		this.$toast('请上传文件');
		return;
	}
	formData.append('file', info.file);
	let para = {
		//这是额外的参数
	}
	formData.append("para", JSON.stringify(para));
	
	uni.uploadFile({
		url: 'htpp:127.0.0.1:8080/xxx/xxxx/xxxxx', //仅为示例,非真实的接口地址
		filePath: info.file.path,
		name: 'file',
		formData: {
			para: JSON.stringify(para)
		},
		success: (uploadFileRes) => {
			this.$toast("上传成功");
		},
		fail: (err) => {
			this.$toast("提交失败:" + err);
		},
},

三、后端

关键代码:

java 复制代码
public void uploadMaterial(HttpServletRequest request, HttpServletResponse response, JSONObject parado) throws Exception {
    response.setContentType("text/html;charset=UTF-8");
    JSONObject result = new JSONObject();
    try {
        // 处理入参
        JSONObject para = JSONObject.parseJSON(parado.getString("para"));
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("file");
        if(file != null){
            InputStream stream = file.getInputStream();
            String filename = file.getOriginalFilename();
            String filetype = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
            byte[] b= IoUtil.getBytes(stream);
            String base64 = Base64Encoder.encode(b);
            para.put("base64",base64);
            para.put("wjmc",filename);
            para.put("type",filetype);
        }
     
    } catch (BusinessException e) {
        logger.error("上传材料失败", e);
      
    } catch (Exception e) {
        logger.error("上传材料失败", e);
    }
	......
}
相关推荐
少控科技11 分钟前
QT新手日记028 QT-QML所有类型
开发语言·qt
JavaGuide17 分钟前
IntelliJ IDEA 2026.1 EAP 发布!拥抱 Java 26,Spring Boot 4 深度支持!
java·后端·mysql·springboot·idea·大厂面试·javaguide
HarmonLTS19 分钟前
Python人工智能深度开发:技术体系、核心实践与工程化落地
开发语言·人工智能·python·算法
壹号机长20 分钟前
vue3+uniapp 今天及未来六天日期的时间段预约选择,时间段预约当前时间之前禁用选择
uni-app
丁一郎学编程25 分钟前
测试开发面经
java·开发语言
wjs202427 分钟前
TypeScript 命名空间
开发语言
a程序小傲30 分钟前
京东Java面试被问:RPC调用的熔断降级和自适应限流
java·开发语言·算法·面试·职场和发展·rpc·边缘计算
独自破碎E33 分钟前
MyBatis Flex和MyBatis Plus的区别
java·开发语言·mybatis
葡萄成熟时 !1 小时前
正则表达式
java·正则表达式
无心水1 小时前
微服务架构下Dubbo线程池选择与配置指南:提升系统性能与稳定性
java·开发语言·微服务·云原生·架构·java-ee·dubbo