科百科
当前位置: 首页 范文大全

spring文件上传怎么实现(spring文件上传大小限制)

时间:2023-06-12 作者: 小编 阅读量: 1 栏目名: 范文大全

SpringBoot或SpringCloud快速实现文件上传很多时候我们都需要在SpringBoot或SpringCloud中快速集成文件上传功能,但是对于新手来说增加文件上传功能需要查阅很多文档。这里给出了示例可以帮助您快速将文件上传功能集成到系统中来。

Spring Boot或Spring Cloud快速实现文件上传

很多时候我们都需要在Spring Boot或Spring Cloud中快速集成文件上传功能,但是对于新手来说增加文件上传功能需要查阅很多文档。这里给出了示例可以帮助您快速将文件上传功能集成到系统中来。

第一步,我们需要在application.yml中配置文件上传的大小

spring:servlet:multipart:max-file-size: 1500MBmax-request-size: 1500MB

第二步,为了能快速处理文件名和URL,我们要用到FilenameUtils,在pom.xml的dependencies中引入Apache Commons IO,注意是否已经有引用,避免版本冲突

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency>

第三步,写一个Controller,处理文件上传的请求

import org.apache.commons.io.FilenameUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;import java.io.File;import java.util.LinkedHashMap;import java.util.Map;import java.util.UUID;/** * 文件上传控制器 * * @author 杨若瑜 */@RestController@RequestMapping("/platform/")public class UploadFileController {// 相对于项目根路径的上传路径private static final String UPLOAD_FOLDER = "/upload/";// 返回给前端的服务器根路径(分布式、CDN场景很有用)private static final String URL_SERVER = "http://127.0.0.1:8080/";// 允许上传的文件扩展名private static final String[] ALLOW_EXTENSIONS = new String[]{// 图片.jpg", .jpg", .jpg", .jpg", .jpg",// 压缩包"zip", "rar", "gz", "7z", "cab",// 音视频,"wav", "avi", "mp4", "mp3", "m3u8", "ogg", "wma", "wmv", "rm", "rmvb", "aac", "mov", "asf", "flv",// 文档"doc", "docx", "xls", "xlsx", "ppt", "pptx", "pot", "txt", "csv", "md", "pdf"};/*** 判断文件名是否允许上传* @param fileName 文件名* @return*/public boolean isAllow(String fileName) {String ext = FilenameUtils.getExtension(fileName).toLowerCase();for (String allowExtension : ALLOW_EXTENSIONS) {if (allowExtension.toLowerCase().equals(ext)) {return true;}}return false;}/*** 上传文件* @param request 请求* @param file 文件,与前台提交表单的file相一致* @return 返回JSON*/@RequestMapping("upload")public Object upload(HttpServletRequest request, @RequestParam("file") MultipartFile file) {String webAppFolder = request.getServletContext().getRealPath("/");String fileName = file.getOriginalFilename();if (isAllow(fileName)) {String ext = FilenameUtils.getExtension(fileName).toLowerCase();String newFileName = UUID.randomUUID().toString().replace("-", ");// 自动创建上传目录String targetPath = FilenameUtils.normalize(webAppFolder + "/" + UPLOAD_FOLDER);String targetFile = FilenameUtils.normalize(targetPath + "/" + newFileName + "." + ext);new File(targetPath).mkdirs();try {String urlPath = URL_SERVER + "/" + UPLOAD_FOLDER + "/" + newFileName + "." + ext;file.transferTo(new File(targetFile));Map<String, Object> resJson = new LinkedHashMap<>();resJson.put("status", "success");resJson.put("data", FilenameUtils.normalize(urlPath,true).replace("http:/","http://").replace("http:/","http://"));return resJson;} catch (Exception e) {e.printStackTrace();Map<String, Object> resJson = new LinkedHashMap<>();resJson.put("status", "error");resJson.put("message", "文件上传失败:" + e.getMessage());return resJson;}} else {Map<String, Object> resJson = new LinkedHashMap<>();resJson.put("status", "error");resJson.put("message", "该类型文件不允许上传");return resJson;}}}

第四步、写一个测试网页upload.html,启动并测试一下是否好用。

<!doctype html><html lang="zh"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>上传文件测试</title></head><body><form action="/platform/upload" method="post" enctype="multipart/form-data">请选择文件:<input type="file" name="file"><br><input type="submit" value="上传"></form></body></html>

选择一张照片,上传

此时后台会返回一个JSON,我们打开data所指向的图片看看是否上传成功:

果然,图片已经上传成功

至此,如何使用Spring Boot或Spring Cloud实现文件上传功能就写到这里。最后需要补充的是,如果你的使用场景使用ajax或App上传,表单提交类型必须为multipart/form-data,并且以post的方式提交。

这里放上jQuery的范例:

// userInfoAvatar是一个input,并且type为filevar file = document.getElementById('userInfoAvatar').files[0];var formData = new FormData();formData.append("file",file);$.ajax({type: 'POST',url: '/platform/upload',data: formData,contentType: false,processData: false,dataType: "json",mimeType: "multipart/form-data",success: function(data) { // 成功时回调},error : function(data){// 失败时回调}});

放上axios范例:

// userInfoAvatar是一个input,并且type为filelet file = document.getElementById('userInfoAvatar').files[0];let formData = new FormData();formData.append("file",file);axios({ method: 'POST',url: '/platform/upload',data:formData,headers: { 'Content-Type': 'multipart/form-data'}}).then((data)=>{ console.log(data)}).catch((ex)=>{ console.error(ex)})

放上Http Client Fluent API范例:

String fileName = 文件名;byte[] bytes = 文件的二进制;MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE).setCharset(Charset.forName("utf-8"));builder.addBinaryBody("file", bytes, ContentType.MULTIPART_FORM_DATA, fileName); String responseJson = Request.Post("http://127.0.0.1:8080/platform/upload").connectTimeout(20000).socketTimeout(20000).body(builder.build()).execute().returnContent().asString();System.out.println(responseJson);

其他的框架如法炮制即可。真正放到正式环境之前记得要加强安全防护,对用户进行鉴权。

    推荐阅读
  • 发财树在家中如何摆放 发财树在家中摆放位置

    家居生活是倡导低碳的重要组成部分,用绿色植物装饰家居,既可以美化环境,又能净化空气;另外,电视开着的时候,会的释放有害辐射,发财树可有效的吸收这些辐射,人也会变得精神一点,看上去更健康。

  • 昆明大案纪实孙小果(昆明恶霸孙小果)

    孙小果离奇的26年犯罪之路,最终难逃法网!孙小果从第一次犯罪一直到真正被执行死刑,一共经历了26年的时间,正是因为有着层层的保护伞,一次又一次的让他逃脱了法律的制裁,被判了死刑之后,居然在20年后突然复活了,又出现在社会上,危害大众,相关部门也是通过了艰难又缜密的一系列调查取证,2020年2月20日,孙小果被正式的执行了死刑!

  • 梦见很多男生用尿不湿(意味什么)

    梦见很多男生用尿不湿梦见男生穿了尿不湿,这两天的你是将自己先放在一边为了别人而服务的。而且经由关照陷於困境的人自己的运气自然跟著提升。别人委托依赖你的事愉快的接受下来,更有助於掌握运气的波潮喔。恋爱中的人梦见男生穿了尿不湿,说明有二婚之倾向,第一次婚姻未能圆满幸福。本命年的人梦见男生穿了尿不湿,意味着贵人扶助,升官发财、顺利如意勿贪多贪大。怀孕的人梦见男生穿了尿不湿,预示生女,冬占生男。

  • 美国人看三大科学(来看科学有多美)

    天竺葵属植物的香味来自于叶子中的油脂,我们可以通过轻微的摩擦或挤压使它发出香味。已知在超过一千个植物家族中发现了草酸钙,其功能尚不完全清楚。人们猜测这种晶体的形成能够吸收植物摄入的过量钙。花朵可以通过多种方式吸引蜜蜂,包括气味、花蜜、以及花瓣的形状等。这种气味能够防止牲畜并吸收传粉者。在夜间,它们会呼出二氧化碳并吸收氧气。在柱头的花冠之下等待接受能够产生精子的花粉的是玫瑰的子房。

  • 开肩的正确方法图(开肩的正确方法)

    开肩的正确方法图将双手在背后互抱手肘,但是要注意肩膀向后打开,肩胛骨靠拢下沉。腹部微收,上手十指相扣,慢慢向上抬起远离身体,双肩要打开下沉。准备一条毛巾,双手拿住毛巾,举过头顶,腹部收紧。前后晃动,身体不要动,只是肩膀和手在动。双手依次将身体拉向两侧,抓毛巾的位置不要变,下方的手尽可能向下拉毛巾。反复循环几次后,换左手在上,右手在下。

  • 爆炒酸菜蚕豆做法(葱油酸菜蚕豆清香爽口)

    制作这道菜最好把蚕豆表皮去掉,这样容易入味,而且口感也好,但是不介意的话可以不去掉。泡酸菜要把水汽炒出来,这样酸菜的味道才容易出来,制作出来的蚕豆才入味。蚕豆要添水多煮一会,要是不把蚕豆煮熟、熟透,否则吃完后不容易消化,防止涨肚。以上内容是我和大家分享的“葱油酸菜蚕豆”的做法,希望对大家有所帮助今天就和大家分享到这儿。

  • 毫不足道的意思是什么(毫不足道的含义)

    毫不足道的意思是微小得很,不值得一提指意义、价值等小得不值得一提毫:细,小;足:值得;道:谈起近义词:微不足道出自郭沫若《百花齐放·单色蓳》诗:“在草花中我们虽然是微不足道,但我们的花色却算是紫色代表”,现在小编就来说说关于毫不足道的意思是什么?出自郭沫若《百花齐放·单色蓳》诗:“在草花中我们虽然是微不足道,但我们的花色却算是紫色代表。”

  • 苹果手机的兼容模式在哪设置(苹果手机的兼容模式的设置方法)

    我们一起去了解并探讨一下这个问题吧!苹果手机的兼容模式在哪设置打开safari浏览器以后,进入偏好设置。在高级设置标签里,勾选显示开发的菜单。打开开发下拉菜单,找到用户代理,就可以看到兼容模式了。

  • 广汽管理层(广汽高层人事变动)

    2016年,郁俊出任广汽乘用车总经理的第一年,广汽传祺累计销量达372034辆,同比大增90.66%,成为其有史以来最佳成绩。2019年上半年,在车市整体低位运行的大影响下,广汽乘用车累计销量同比下降30.3%。张跃赛在广汽三菱任职期间,带领广汽三菱达成销量超计划、超同行的快速发展。销量统计数据显示,今年上半年,广汽集团终端销量累计102.28万辆,同比增长6.8%。

  • 家庭拌面的做法大全(家庭拌面的做法大全列述)

    ⑵色拉油倒入锅中,稍稍加热至温热,放入切好的香葱段。芝香拌面食材:鸡蛋2个、荷兰豆20g、挂面100g、芝麻酱2汤匙、生抽1汤匙、香醋2/1汤匙、盐1g、白糖1g、蒜3瓣、麻油15ml、小米椒2个。2汤匙芝麻酱、1汤匙生抽、1/2汤匙香醋、1克食盐、1克白糖调成酱汁。⑵后将蒜和辣椒丁拌入酱汁。荷兰豆放滚水中焯熟后切成细丝。⑷用芝麻油将芝麻酱调开,然后加入其它调味料调成酱。