导航:首页 > 版本升级 > springmvc获取上传文件大小

springmvc获取上传文件大小

发布时间:2023-03-24 15:18:43

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。18.2CreatingRESTfulservices1.@RequestMappingSpringusesthe@.类似于struts的action-mapping。可以指定POST或者GET。2.@PathVariableThe@.用于抽取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,.3.@RequestParam官方文档居然没有对这个注解进行说明,估计是遗漏了(真不应该啊)。这个注解跟@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";}4.@RequestBody和@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)
public@ResponseBodyMap<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;
//获取servletContext
ServletContext 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;

@Controller
public 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);

}

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

}
即可拦截到上传文件大小

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():获取文件的字节大小,单位为byte
boolean 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为文件名。

阅读全文

与springmvc获取上传文件大小相关的资料

热点内容
win10安装炉石 浏览:95
使命召唤iphone 浏览:878
追光系统编程软件是什么 浏览:450
ios获取网络流量 浏览:668
mac中我的应用程序 浏览:483
苹果手机怎么打包一个文件夹 浏览:3
数控编程课程都有哪些 浏览:785
ps文件图案不对或已遭破坏 浏览:926
nsurlsession上传文件 浏览:376
定向五轴加工怎么编程 浏览:134
ps如何是照片文件压缩 浏览:398
cad2010教程下载 浏览:244
win101703睡眠后黑屏 浏览:332
mba哪个网站写论文好 浏览:455
英雄联盟音效在哪个文件夹 浏览:165
ug编程如何拆电 浏览:198
手机u盘不能直接发送文件到微信 浏览:383
影视大世界有安卓的么 浏览:588
word文件对比wps 浏览:986
linux网络文件映射 浏览:499

友情链接