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

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

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

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);

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

    推荐阅读
  • 怪物猎人崛起联机要会员吗(怪物猎人崛起联机要会员吗手游)

    怪物猎人崛起联机要会员吗?很多小伙伴可能还不清楚游戏怎么联机吧,今天小编给大家带来怪物猎人崛起联机方法介绍,快来看一下吧。联机方法购买ns线上游戏需要的ns会员,准备好良好的无线网络,最好来个加速器。准备好后可以通过输入好友的房间代码加入好友的房间,自己建房间的话则需要把房间代码发给好友。

  • 属虎的几月出生最好(什么月份的虎好命)

    属虎的几月出生最好属虎的四月和八月出生最好。属虎人四月出世,其月正是立夏之际,虎人生于这个月的命运:荣华富贵享尽,高官厚禄吃穿不完,家中有贤淑佳妻协助,门外有达官贵人扶持,后代孝顺贤达,也能为官为将,终身逍遥自在,处处干事利市,终身没有多少烦恼。

  • 刘恩尚个人资料(刘恩尚的简介)

    刘恩尚个人资料刘恩尚,1982年12月4日出生于山东省,生长于浙江省临安市,中国内地影视男演员、歌手。2005年,参加湖南卫视选秀节目《闪亮新主播》,进入全国二十强。2009年,出演年代商战剧《烟雨斜阳》,转型成为演员。2011年,出演的都市爱情剧《千山暮雪》播出。2012年,出演剿匪剧《智取华山传奇》。2014年,出演当代都市剧《嫁个老公过日子》。2016年,出演古装传奇剧《楚乔传》。2017,年出演古装爱情剧《延禧攻略》饰演李玉。

  • 竹笙卷做法步骤(竹笙卷简易做法)

    我们一起去了解并探讨一下这个问题吧!竹笙卷做法步骤主要食材竹笙2条,干发菜5公克,金菇10公克,丝瓜10公克,香菇2小条,素食高汤20公克,水30公克,糖10公克,盐3公克,太白粉少许。干发菜浸泡冷水至软备用。将丝瓜、香菇切成条形后,再与竹笙、金菇放在一起,利用发菜稍加捆绑后,放入蒸锅中以中大火蒸约5分钟,取出摆盘。热锅,放入所有调味料略煮调匀成薄芡后,浇淋在作法2的材料上即可。

  • 长安杰勋用了什么发动机 长安杰勋正时皮带怎么安装

    长安杰勋是长安旗下的一款mpv车型,这款车一共使用了两款发动机,一款是1.5升自然吸气发动机,另一款是2.0升自然吸气发动机。长安杰勋的长宽高分别是4415毫米,1750毫米,1640毫米,轴距为2710毫米。这款发动机搭载了多点电喷技术,并且使用了铝合金缸盖和铸铁缸体。长安杰勋的2.0升自然吸气发动机拥有152马力和192牛米的最大扭矩,这款发动机的最大扭矩转速为4000到4500转每分钟,最大功率转速为5500到6000转每分钟。空间对于mpv车型来说是比较重要的。

  • 新植物大战僵尸3手游(植物大战僵尸3来了)

    JK准确的预测了植物大战僵尸3将在2020年前发布。首先宝开是一家制作休闲游戏的公司,2009年发布了《植物大战僵尸》在全球几乎无人不知,无人不晓。2013年,宝开发布了植物大战僵尸2,自那以后无论是在中国还是海外,植物大战僵尸2的下载量一度占据休闲游戏的榜首。业绩也是相当的好,EA的营收也是非常的多,一直给予宝开很多的资源和信任。甚至EA在北京的分公司都让宝开中国进行运营。

  • 图丽150-500镜头参数(MeoptaMeostar10x50望远镜)

    捷克位于中欧,接壤德国和奥地利。德国不必说,蔡司和徕卡的望远镜远近闻名;奥地利的施华洛世奇光学,也是市场的后起之秀,EL系列和新SLC系列已经是名副其实的顶级镜子了。Meopta是捷克最大的光学企业,1933年成立,二战德国吞并捷克之后,Meopta曾经供应德军光学器材。Meopta是除了蔡司、徕卡、施华洛世奇外,档次不低的一个品牌。10x50是50mm口径中的一款,同口径的还有8倍和12倍。MadeinCzech调脚轮和视力补偿做在一起,也是施华洛世奇SLC系列的设计。

  • 怎么做水晶鸡蛋(如何做水晶鸡蛋)

    怎么做水晶鸡蛋?接下来我们就一起去研究一下吧!鸡蛋壳清水洗净,放入开水中浸泡后捞出控干水分。鸡蛋壳中加入小番茄、猕猴桃、黄桃备用。锅中加入清水500g、白砂糖30g、白凉粉30g搅匀倒入鸡蛋壳中放凉即可。

  • 老年人与科技时代渐行渐远(让老年人也能享受信息时代的便利)

    近年来,党中央、国务院高度重视应对人口老龄化工作。政策提出以来,各运营商积极梳理老年人可能遇到的各种困难,在服务范围、服务标准、服务流程、服务资费等方面制定针对性举措。在工作人员的帮助下,姜老伯的问题很快得到解决。这是姜老伯的期待,也是大多数老年人的心声。工信部宣布于2021年1月起,在全国范围内启动为期一年的互联网应用适老化及无障碍改造专项行动。