1. Spring Mvc 怎么上传超过全局配置的文件
springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便。我们通过下面的配置来使用springMVC文件上传功能。<bean id="multipartResolver" class="com.youth.controller.fileupload.MultipartListenerResolver"><!– 设置上传文件的最大尺寸为10M –><property name="maxUploadSize" value="10240"/><property name="maxInMemorySize" value="4096"/><property name="defaultEncoding" value="UTF-8"/><property name="resolveLazily" value="true"/> </bean>Controller层我们这样接收文件@RequestMapping("fileUpload")public void fileUpload(@RequestParam("myFile") MultipartFile multipartFile) throws Exception{String fileName = multipartFile.getOriginalFilename();File f = createFile(fileName);multipartFile.transferTo(f);}页面上记得指定enctype属性哦<form method="post" enctype="multipart/form-data"></form>如果你的springMVC配置是正确的,那么到此springMVC的文件上传功能已经可以用了。一切都很完美。由于我们配置了maxUploadSize属性,那么如果我们的文件超过了10M会出现什么情况呢?理论上系统会抛出异常,那么如何处理呢?springMVC异常处理的配置方式如下:<bean class="org.springframework.web.servlet.handler."><property name="exceptionMappings"><props><prop key="java.lang.Exception">redirect:/error.jsp</prop><prop key="org.springframework.web.multipart.">redirect:/MaxUploadSizeError.jsp</prop></props> </property><property name="defaultErrorView" value="redirect:/error.jsp"></property> <property name="defaultStatusCode" value="500"></property></bean>上面的配置作用是如果系统抛出异常,系统跳转到MaxUploadSizeError.jsp页面给用户以提示。如果是其他Exception异常,则跳转到error.jsp页面。接下来我们测试一下上面的异常处理是否生效了。在你的代码任意地方试着抛出NullPointException异常,发现页面的确能跳转到error.jsp,证明我们的异常处理是生效的。然后我们上传一个10M以上的文件,我们发现后台控制台抛出了异常,我们期待着页面转向到MaxUploadSizeError.jsp。
2. spring mvc restful能上传多大文件
SpringMVC本身对Restful支持非常好。它的@RequestMapping、@RequestParam、@PathVariable、@ResponseBody注解很好的支持了REST。[email protected]@.类似于struts的action-mapping。可以指定POST或者GET。[email protected]@.用于抽取URL中的信息作为参数。(注意,不包括请求字符串,那是@RequestParam做的事情。)@RequestMapping("/owners/{ownerId}",method=RequestMethod.GET)publicStringfindOwner(@PathVariableStringownerId,Modelmodel){//}如果变量名与pathVariable名不一致,那么需要指定:@RequestMapping("/owners/{ownerId}",method=RequestMethod.GET)publicStringfindOwner(@PathVariable("ownerId")StringtheOwner,Modelmodel){//implementationomitted}@,long,[email protected]官方文档居然没有对这个注解进行说明,估计是遗漏了(真不应该啊)。这个注解跟@PathVariable功能差不多,只是参数值的来源不一样而已。它的取值来源是请求参数(querystring或者post表单字段)。对了,因为它的来源可以是POST字段,所以它支持更丰富和复杂的类型信息。比如文件对象:@RequestMapping("/imageUpload")(@RequestParam("name")Stringname,@RequestParam("description")Stringdescription,@RequestParam("image")MultipartFileimage)throwsIOException{this.imageDatabase.storeImage(name,image.getInputStream(),(int)image.getSize(),description);return"redirect:imageList";}还可以设置defaultValue:@RequestMapping("/imageUpload")(@RequestParam(value="name",defaultValue="arganzheng")Stringname,@RequestParam("description")Stringdescription,@RequestParam("image")MultipartFileimage)throwsIOException{this.imageDatabase.storeImage(name,image.getInputStream(),(int)image.getSize(),description);return"redirect:imageList";}[email protected]和@ResponseBody这两个注解其实用到了Spring的一个非常灵活的设计——HttpMessageConverter18.3.2HTTPMessageConversion与@RequestParam不同,@RequestBody和@ResponseBody是针对整个HTTP请求或者返回消息的。前者只是针对HTTP请求消息中的一个name=value键值对(名称很贴切)。HtppMessageConverter负责将HTTP请求消息(HTTPrequestmessage)转化为对象,或者将对象转化为HTTP响应体(HTTPresponsebody)。{//.booleansupports(Classclazz);//.ListgetSupportedMediaTypes();//,andreturnsit.Tread(Classclazz,HttpInputMessageinputMessage)throwsIOException,;//.voidwrite(Tt,)throwsIOException,;}SpringMVC对HttpMessageConverter有多种默认实现,基本上不需要自己再自定义–convertsformdatato/–convertto/fromajavax.xml.transform.-convertto/-convertto/fromJSONusingJackson'sObjectMapperetc然而对于RESTful应用,用的最多的当然是。但是不是默认的HttpMessageConverter:lementsHandlerAdapter,Ordered,BeanFactoryAware{(){//(false);//SeeSPR-=newStringHttpMessageConverter();stringHttpMessageConverter.setWriteAcceptCharset(false);this.messageConverters=newHttpMessageConverter[]{(),stringHttpMessageConverter,newSourceHttpMessageConverter(),()};}}如上:默认的HttpMessageConverter是ByteArrayHttpMessageConverter、stringHttpMessageConverter、SourceHttpMessageConverter和转换器。所以需要配置一下:text/plain;charset=GBK配置好了之后,就可以享受@Requestbody和@ResponseBody对JONS转换的便利之处了:@RequestMapping(value="api",method=RequestMethod.POST)@(@RequestBodyApiapi,@RequestParam(value="afterApiId",required=false)IntegerafterApiId){Integerid=apiMetadataService.addApi(api);returnid>0;}@RequestMapping(value="api/{apiId}",method=RequestMethod.GET)@ResponseBodypublicApigetApi(@PathVariable("apiId")intapiId){returnapiMetadataService.getApi(apiId,Version.primary);}一般情况下我们是不需要自定义HttpMessageConverter,不过对于Restful应用,有时候我们需要返回jsonp数据:packageme.arganzheng.study.springmvc.util;importjava.io.IOException;importjava.io.PrintStream;importorg.codehaus.jackson.map.ObjectMapper;importorg.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;importorg.springframework.http.HttpOutputMessage;importorg.springframework.http.converter.;importorg.springframework.http.converter.json.;importorg.springframework.web.context.request.RequestAttributes;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;{(){ObjectMapperobjectMapper=newObjectMapper();objectMapper.setSerializationConfig(objectMapper.getSerializationConfig().withSerializationInclusion(Inclusion.NON_NULL));setObjectMapper(objectMapper);}@(Objecto,)throwsIOException,{StringjsonpCallback=null;RequestAttributesreqAttrs=RequestContextHolder.currentRequestAttributes();if(){jsonpCallback=((ServletRequestAttributes)reqAttrs).getRequest().getParameter("jsonpCallback");}if(jsonpCallback!=null){newPrintStream(outputMessage.getBody()).print(jsonpCallback+"(");}super.writeInternal(o,outputMessage);if(jsonpCallback!=null){newPrintStream(outputMessage.getBody()).println(");");}}}
3. springmvc文件上传可以是zip吗
Spring MVC文件上传框架是支持zip的,还包括text、xls、word等文件格式,但一般文件大小都有一定的限制,如下文件上传zip格式的代码:
packagecom.test.controller;importjava.io.File;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importorg.apache.commons.io.FilenameUtils;importorg.apache.commons.lang3.ArrayUtils;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.multipart.commons.CommonsMultipartFile;importcom.test.servlet.NoSupportExtensionException;importcom.test.servlet.State;@Controller@RequestMapping(value="/mvc")publicclassUploadController{/**日志对象*/privateLoglogger=LogFactory.getLog(this.getClass());=1L;/**上传目录名*/="uploadFiles";/**允许上传的扩展名*/privatestaticfinalString[]extensionPermit={"txt","xls","zip"};@RequestMapping(value="/upload.do",method=RequestMethod.POST)[email protected]<String,Object>fileUpload(@RequestParam("file")CommonsMultipartFilefile,HttpSessionsession,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{logger.info("UploadController#fileUpload()start");//清除上次上传进度信息StringcurProjectPath=session.getServletContext().getRealPath("/");StringsaveDirectoryPath=curProjectPath+"/"+uploadFolderName;FilesaveDirectory=newFile(saveDirectoryPath);logger.debug("Projectrealpath["+saveDirectory.getAbsolutePath()+"]");//判断文件是否存在if(!file.isEmpty()){StringfileName=file.getOriginalFilename();StringfileExtension=FilenameUtils.getExtension(fileName);if(!ArrayUtils.contains(extensionPermit,fileExtension)){("NoSupportextension.");}file.transferTo(newFile(saveDirectory,fileName));}logger.info("UploadController#fileUpload()end");returnState.OK.toMap();}}
4. 如何使用springmvc实现文件上传
在现在web应用的开发,springMvc使用频率是比较广泛的,现在给大家总结一下springMvc的上传附件的应用,希望对大家有帮助,废话不多说,看效果
准备jar包
4.准备上传代码@Controller//spring使用注解管理bean@RequestMapping("/upload")//向外暴露资源路径,访问到该类public class UploadController {/*** 上传功能* @return* @throws IOException*/@RequestMapping("/uploadFile")//向外暴露资源路径,访问到该方法public String uploadFile(MultipartFile imgFile,HttpServletRequest req) throws IOException{if(imgFile != null ){//获取文件输入流InputStream inputStream = imgFile.getInputStream();//随机产生文件名,原因是:避免上传的附件覆盖之前的附件String randName = UUID.randomUUID().toString();//随机文件名//获取文件原名String originalFilename = imgFile.getOriginalFilename();//获取文件后缀名(如:jpgpng…)String extension = FilenameUtils.getExtension(originalFilename);//新名字String newName = randName+"."+extension;//获取servletContextServletContext servletContext = req.getSession().getServletContext();//获取根路径String rootPath = servletContext.getRealPath("/");File file = new File(rootPath,"upload");//判断文件是否存在,若不存在,则创建它if(!file.exists()){file.mkdirs();}//获取最终输出的位置FileOutputStream fileOutputStream = new FileOutputStream(new File(file,newName));//上传附件IOUtils.(inputStream, fileOutputStream);}return null;}}
5. springmvc文件上传怎么获取文件的大小
在上一篇文章中,主要介绍了Spirng MVC环境下的正常情况下文件上传功能实现。在实际开发的时候,还会涉及到上传文件大小和类型的限制,接下来就会对Spirng MVC环境下文件上传大小和类型的限制进行介绍,还会讲解到文件上传大小tomcat服务器bug问题及解决方案。
网页链接
6. 求SpringMVC大文件上传详解及实例代码
SpringMVC的文件上传非常简便,首先导入文件上传依赖的jar:<!– 文件上传所依赖的jar包 –><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency> 在springMVC-servlet.xml配置文件中配置文件解析器:<!–1*1024*1024即1M resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常 –><!–文件上传解析器–><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="1048576"/><property name="defaultEncoding" value="UTF-8"/><property name="resolveLazily" value="true"/></bean>注意解析器的id必须等于multipartResolver,否则上传会出现异常import org.apache.commons.io.FileUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.commons.CommonsMultipartFile;import java.io.File;@Controllerpublic class FileController {/*** 上传单个文件操作* MultipartFile file就是上传的文件* @return*/@RequestMapping(value = "/upload1.html")public String fileUpload1(@RequestParam("file") MultipartFile file) {try {//将上传的文件存在E:/upload/下FileUtils.InputStreamToFile(file.getInputStream(), new File("E:/upload/",file.getOriginalFilename()));} catch (Exception e) {e.printStackTrace();}//上传成功返回原来页面return "/file.jsp";}}上传文件时,Controller的方法中参数类型是MultipartFile即可将文件映射到参数上。页面:file.jsp:<form method="post" action="/upload1.html" enctype="multipart/form-data"><input type="file" name="file"/><button type="submit" >提交</button></form>
7. Spring MVC 上传文件大小怎么处理
spring配置文件可以设置上传文件的大小。
8. springmvc如何拦截上传文件最大限制异常
在applicationContext.xml中添加: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!– 指定所上传文件的总大小不能超过20M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 –> <property name="maxUploadSize" value="2000000"/><!– 1G 1073741824 –> <property name="defaultEncoding" value="utf-8"></property> <property name="resolveLazily" value="true"></property> </bean> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!– 指定所上传文件的总大小不能超过20M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 –> <property name="maxUploadSize" value="2000000"/><!– 1G 1073741824 –> <property name="defaultEncoding" value="utf-8"></property> <property name="resolveLazily" value="true"></property> </bean> 只需在控制层 @Excep… 在applicationContext.xml中添加:<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!– 指定所上传文件的总大小不能超过20M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 –> <property name="maxUploadSize" value="2000000"/><!– 1G 1073741824 –> <property name="defaultEncoding" value="utf-8"></property> <property name="resolveLazily" value="true"></property> </bean> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!– 指定所上传文件的总大小不能超过20M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 –> <property name="maxUploadSize" value="2000000"/><!– 1G 1073741824 –><property name="defaultEncoding" value="utf-8"></property><property name="resolveLazily" value="true"></property></bean>只需在控制层@ExceptionHandler public ModelAndView doException(Exception e, HttpServletRequest request) throws Exception { Map<String, Object> map = new HashMap<String, Object>(); if (e instanceof ) { long maxSize = (() e).getMaxUploadSize(); map.put("error", "上传文件太大,不能超过" + maxSize / 1024 + "k"); // response.setHeader("Content-type", "text/html;charset=UTF-8"); // // 设置默认编码 // response.setCharacterEncoding("UTF-8"); // response.getWriter().write("上传文件太大,不能超过" + maxSize / 1024 + "k"); } else if (e instanceof RuntimeException) { map.put("error", "未选中文件"); } else { map.put("error", "上传失败"); } return new ModelAndView("upload", map); } @ExceptionHandlerpublic ModelAndView doException(Exception e, HttpServletRequest request) throws Exception {Map<String, Object> map = new HashMap<String, Object>();if (e instanceof ) {long maxSize = (() e).getMaxUploadSize();map.put("error", "上传文件太大,不能超过" + maxSize / 1024 + "k");// response.setHeader("Content-type", "text/html;charset=UTF-8");// // 设置默认编码// response.setCharacterEncoding("UTF-8");// response.getWriter().write("上传文件太大,不能超过" + maxSize / 1024 + "k");} else if (e instanceof RuntimeException) {map.put("error", "未选中文件");} else {map.put("error", "上传失败");}return new ModelAndView("upload", map);}即可拦截到上传文件大小
9. springmvc 怎么将文件上传到linux服务器
Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的。Spring使用Jakarta Commons FileUpload 技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。Spring MVC上下文中默认没有装配MultipartResolver,因此默认情况下不能处理文件的上传工作。如果想要使用Spring的文件上传功能,需要先在上下文中配置MultipartResolver。第一步:配置MultipartResolver使用CommonsMultipartResolver配置一个MultipartResolver解析器:<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8" p:maxUploadSize="5242880" p:uploadTempDir="upload/temp" />defaultEncoding必须和用户JSP的pageEncoding属性一致,以便正确读取表单的内容。uploadTempDir是文件上传过程所使用的临时目录,文件上传完成后,临时目录中的临时文件会被自动清除。第二步:编写文件上传表单页面和控制器JSP页面如下:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <h1>选择上传文件</h1> <form action="<%=basePath%>user/upload.do" method="post" enctype="multipart/form-data"> 文件名:<input type="text" name="name" /><br/> <input type="file" name="file" /><br/> <input type="submit" /> </form> </body></html>注意:负责上传的表单和一般表单有一些区别,表单的编码类型必须是"Multipart/form-data"控制器UserController如下:package com.web;import java.io.File;import java.io.IOException;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;@Controller@RequestMapping(value = "/user")public class UserController { @RequestMapping(value = "/upload.do") public String updateThumb(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) throws IllegalStateException, IOException { if (!file.isEmpty()) { file.transferTo(new File("d:/temp/" + name + file.getOriginalFilename().substring( file.getOriginalFilename().lastIndexOf(".")))); return "redirect:success.html"; } else { return "redirect:fail.html"; } }}Spring MVC会将上传文件绑定到MultipartFile对象中。MultipartFile提供了获取上传文件内容、文件名等内容,通过transferTo方法还可将文件存储到硬件中,具体说明如下:byte[] getBytes() :获取文件数据 String getContentType():获取文件MIME类型,如image/pjpeg、text/plain等InputStream getInputStream():获取文件流String getName():获取表单中文件组件的名字String getOriginalFilename():获取上传文件的原名long getSize():获取文件的字节大小,单位为byteboolean isEmpty():是否有上传的文件void transferTo(File dest):可以使用该文件将上传文件保存到一个目标文件中源码:uploadtest.zip
10. springmvc文件上传路径设置
springmvc文件上传路径设置:1、导入文件上传的坐标。2、在spring-mvc.xml配置文件中配置文件解析器对象,property可以配置上传文件的大小等属性。注意:id一定要是multipartResolver。3、前端页面的form表单,method是post方法,加上enctype=”multipart/form-data”这个属性。4、后端方法的参数类型为MultipartFile,参数名要与前端文件域的name一样。5、最后用file参数的getOriginalFilename()方法获取上传的文件名,然后再用transferTo(参数1,参数2)方法将文件上传到指定路径。注:transferTo(参数1,参数2)的参数1为指定将文件上传的路径,参数2为文件名。