SpringMVC上传文件

以下有三种可以上传的位置:

1.一些文件存储量很小的工程,上传文件放置在工程本身的目录下,但是 随着文件越来越大,工程启动和运行也会变慢,所以一般不采用。

2.是将图片上传到一个Web应用工程所在容器(Tomcat)位于的服务器中,单独开辟一个盘符或文件夹用于存储上传的文件,这种做法让上传的文件与工程本身分离,工程的打包和启动效率不受任何影响。但如果出现海量图片,web应用工程所在的服务器的效率会降低。

3.现在一般的互联网应用,都会为自己的文件上传单独架设一个文件服务器。

在测试程序中,我们选择第二种。

在项目的webContent下新建一个upload文件夹,用于存方法上传到服务器的文件

1.  单个文件上传

 (1)文件上传页面

<form action="testFileUpload" method="post" enctype="multipart/form-data">
File:<input type="file" name="file"/>
<br>
Desc:<input type="text" name="desc">
<input type="submit" value="Upload">
</form>

 (2)springmvc.xml

Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 MultipartResolver
<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8"></property>
		<property name="maxUploadSize" value="10485760"></property>
	</bean>

(3)Controller

@Controller
public class UploadController {

	@RequestMapping("/testFileUpload")
	public String testFileUpload(@RequestParam("desc") String desc, @RequestParam("file") MultipartFile uploadFile,
			HttpSession session) {
		System.out.println("desc: " + desc);
		System.out.println("uploadFile: " + uploadFile);
		ServletContext context = session.getServletContext();
		String realPath = context.getRealPath("/upload");// 获取该文件保存在服务器的真实路径
		String filename = uploadFile.getOriginalFilename();// 获取上传文件名
		File targetfile = new File(realPath + File.separator + filename);//
		System.out.println(targetfile);
		try {
			// uploadFile.transferTo(targetfile);可以替代下面try块的所有代码
			// 读取上传的文件
			InputStream in = uploadFile.getInputStream();
			//指定文件上传的地址
			FileOutputStream fos = new FileOutputStream(targetfile);
			int len;
			byte[] by = new byte[1024];
			while ((len = in.read(by)) != -1) {
				fos.write(by, 0, len);
			}
			in.close();
			fos.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return "forward:/success.jsp";
	}
}

文件上传成功
 

2.多个文件上传

    只需在上面单个文件上传的代码,稍作修改即可。

     (1)上传页面增加一个input标签

<form action="testFileUpload" method="post" enctype="multipart/form-data">
File1:<input type="file" name="file"/>
File2:<input type="file" name="file"/>
<br>
Desc:<input type="text" name="desc">
<br>
<input type="submit" value="Upload">
</form>

(2)Controller定义一个数组接受上传的文件,再加一个for循环进行遍历上传文件

@Controller
public class UploadController {

	@RequestMapping("/testFileUpload")
	public String testFileUpload(@RequestParam("desc") String desc, @RequestParam("file") MultipartFile [] uploadFiles,
			HttpSession session) {
		System.out.println("desc: " + desc);
		
		ServletContext context = session.getServletContext();
		String realPath = context.getRealPath("/upload");// 获取该文件保存在服务器的真实路径
		InputStream in =null;
		FileOutputStream fos=null;
		for(MultipartFile multipartFile:uploadFiles){
		String filename = multipartFile.getOriginalFilename();// 获取上传文件名
		File targetfile = new File(realPath + File.separator + filename);//获取文件描述
		System.out.println(targetfile);
		try {
			multipartFile.transferTo(targetfile);//可以替代下面try块的所有代码
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
		return "forward:/success.jsp";
	}
}

多文件上传成功

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值