SpringMVC(6)文件上传

SpringMVC(6)文件上传

我们做一个上传图片的例子,页面(fileUpload.jsp)功能如下:

上传成功后即时显示上传的图片。

upload.jsp:


<body>

<h3>文件上传</h3>

<form action="/testAnnotationMVC_fileUpload/file/fileUpload2.jspx"

method="post" enctype="multipart/form-data">

<input type="file" name="file" />

<input type="submit" value="上 传" />

</form>

<h5>上传结果:</h5>

<img alt="暂无图片" src="${fileUrl}" />

</body>  

在form表单中,enctype="mulitpart/form-data"是必须的,而且method必须是POST,不要忘记了。

特地搜了一下这个东西,下面是W3CSchool网站上的解释:

HTML enctype 属性

1)他的作用是设置表单的MIME编码,默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据。

2)enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。那么表单请求传到另一个jsp或servlet 里时是不能用request.getParameter()来获取到各个表单元素的值的。使用multipart/form-data上传时,发送的请求和一般的http不一样,需要转化后才能读其他参数。

 

此外,我们还需要导入两个依赖的commons包:

org.apache.commons.fileupload-1.2.0.jar

org.apache.commons.io-1.4.0.jar

一、传统文件流的方式

新建fileUploadController,有如下两个方法:

toFile() --- 跳转到上传的JSP页面

fileUpload() --- 文件上传的出的处理类


@Controller

@RequestMapping("/file")

public class fileUploadController {

@RequestMapping("/toFile")

//跳转到文件上传的JSP页面

public String toFileUpload() {

return "fileUpload";

}

@RequestMapping("/fileUpload")

public String fileUpload(@RequestParam("file") CommonsMultipartFile file,

HttpServletRequest request, ModelMap model) {

//获得原始文件名

String fileName = file.getOriginalFilename();

System.out.println("fileName:"+ fileName);

//新文件名

String newFileName = UUID.randomUUID()+fileName;

//上传到什么地方

String path = "d:/upload/";

File f = new File(path);

if(!f.exists())f.mkdirs();

if(!file.isEmpty()){

try {

FileOutputStream fos = new FileOutputStream(path+newFileName);

InputStream in = file.getInputStream();

int b = 0;

while((b=in.read())!=-1){

fos.write(b);

}

fos.close();

in.close();

} catch (Exception e) {

e.printStackTrace();

}

}

System.out.println("imgurl:"+ path+newFileName);

//保存文件地址,用于JSP页面回显

model.addAttribute("fileUrl", path+newFileName);

return "fileUpload";


二、SpringMVC提供的MultiRequestResolver上传方式

Spring通过对Servlet API的HttpServletRequest接口精选扩展,使其能够很好的处理文件上传。扩展后的接口名为:

org.springframework.web.multipart.MultipartHttpServletRequest

MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)(request);

然后就能正常读取参数:  mRequest.getParameter("xxx");

我们再在fileUploadController里新增一个fileUpload2的方法:


@RequestMapping("/fileUpload2")

public String fileUpload2(HttpServletRequest request,HttpServletResponse response) throws Exception{

CommonsMultipartResolver cmr = new CommonsMultipartResolver(request.getServletContext());

if(cmr.isMultipart(request)){

MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)(request);

Iterator<String> files = mRequest.getFileNames();

while(files.hasNext()){

MultipartFile mFile = mRequest.getFile(files.next());

if(mFile != null){

String fileName = UUID.randomUUID()+mFile.getOriginalFilename();

String path = "d:/upload/"+fileName;

File localFile = new File(path);

mFile.transferTo(localFile);

request.setAttribute("fileUrl", path);

}

}

}

return "fileUpload";

}  

这样我们就完成了文件上传。

时间: 2024-12-20 06:58:15

SpringMVC(6)文件上传的相关文章

SpringMVC中文件上传的客户端验证

SpringMVC中文件上传的客户端验证 客户端验证主要思想:在jsp页面中利用javascript进行对文件的判断,完成验证后允许上传 验证步骤:1.文件名称 2.获取文件的后缀名称 3.判断哪些文件类型允许上传 4.判断文件大小 5.满足条件后跳转后台实现上传 前台界面(验证上传文件是否格式满足要求): <body> <h2>文件上传</h2> <form action="upload01" method="post" 

SpringMVC单文件上传

最近在看SpringMVC的文件上传部分,其实大多数系统都要涉及到文件上传,以前对于Struts的文件上传功能也做过总结了,今天主要说明一下如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤. 一.设置配置文件: SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file [html] view plaincopyprint? <!-- 配置MultipartResolver 用于文

Spring Framework源码(十):SpringMVC之文件上传

我们这一章讲SpringMVC中文件上传的应用,首先我们还是从DispatcherServlet这个核心分发器开始讲起: processedRequest = checkMultipart(request); 还记得上一章讲doDispatch这个方法时见过的方法吧?现在我们来分析下这个方法的具体解析过程: protected HttpServletRequest checkMultipart(HttpServletRequest request) throws MultipartExcepti

关于SpringMVC的文件上传

关于文件的上传,之前写过2篇文章,基于Struts2框架,下面给出文章链接: <关于Struts2的文件上传>:http://www.cnblogs.com/lichenwei/p/3927964.html <关于Struts2的多文件上传>:http://www.cnblogs.com/lichenwei/p/3928200.html 其实文件上传的原理都是一样的,基于SpringMVC的文件上传实现要比Struts2要来得简单许多. 好了,废话不多说,直接切入主题吧,关于上传原

SpringMVC经典系列-12基于SpringMVC的文件上传---【LinusZhu】

注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系[email protected],敬请朋友们斧正,谢谢. 不知不觉已经把Spring的基础部分讲解完了,所讲述的都是在项目中经常用到的东西,是经得住考验的,接下来的部分主要是要讲述使用SpringMVC进行的文件上传.处理Ajax请求.自定义拦截器功能的实现,不多说了,首先讲解文件上传部分,开始--     

SpringMVC学习--文件上传

简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析.在springmvc.xml中配置multipart类型解析器. 1 <!-- 文件上传 --> 2 <bean id="multipartResolver&qu

SpringMVC多文件上传实例

后台Conroller import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Date;

Extjs4 + springMVC的文件上传

用springMVC来做项目,如果遇到文件上传,那么一定要用spring自带的文件处理类来处理上传的文件,因为效率实在高过其他的. 从界面传过来的参数,如果设置了值对象,那么可以从值对象里面取出字符串类型的普通参数,如果不这样做,也可以直接从request里面获得,两种方法都可以. 问题是如果值对象里面写了其他类型的变量,妄想像Struts2那样处理,springMVC就会报出400 Bad Request的错误. 在Struts2里面,我们可以定义一个值对象为 public class Ima

springmvc RestTemplate文件上传

在使用springmvc提供rest接口实现文件上传时,有时为了测试需要使用RestTemplate进行调用,那么在使用RestTemplate调用文件上传接口时有什么特别的地方呢?实际上只需要注意一点就行了,就是创建文件资源时需要使用org.springframework.core.io.FileSystemResource类,而不能直接使用java.io.File对象. Controller中的rest接口代码如下: @ResponseBody @RequestMapping(value =

SSM框架-SpringMVC 实例文件上传下载

SSM框架-SpringMVC 实例文件上传下载 2017-04-17 09:38 4497人阅读 评论(6) 收藏 举报  分类: java基础(3)  目录(?)[+] 目录(?)[+] 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程免费下载 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload