SpringMVC(二)— 文件上传

传统文件上传回顾:
  1. 导入文件上传的jar包
	<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>1.3.1</version>
	</dependency>
	<dependency>
		<groupId>commons-io</groupId>
		<artifactId>commons-io</artifactId>
		<version>2.4</version>
	</dependency>
  1. 编写文件上传的JSP页面
<h3>文件上传</h3>
<form action="user/fileupload" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上传文件"/>
</form>
  1. 编写文件上传的Controller控制器
	/**
	* 文件上传
	* @throws Exception
	*/
	@RequestMapping(value="/fileupload")
	public String fileupload(HttpServletRequest request) throws Exception {
		// 先获取到要上传的文件目录
		String path = request.getSession().getServletContext().getRealPath("/uploads");
		// 创建File对象,一会向该路径下上传文件
		File file = new File(path);
		// 判断路径是否存在,如果不存在,创建该路径
		if(!file.exists()) {
			file.mkdirs();
		}
		// 创建磁盘文件项工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		// 解析request对象
		List<FileItem> list = fileUpload.parseRequest(request);
		// 遍历
		for (FileItem fileItem : list) {
		// 判断文件项是普通字段,还是上传的文件
		if(fileItem.isFormField()) {
			}else {
			// 上传文件项
			// 获取到上传文件的名称
			String filename = fileItem.getName();
			// 上传文件
			fileItem.write(new File(file, filename));
			// 删除临时文件
			fileItem.delete();
			}
		}
		return "success";
	}
SpringMVC传统方式文件上传
  1. SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的
    name属性名称相同。
  2. 代码如下
	/**
	* SpringMVC方式的文件上传
	*
	* @param request
	* @return
	* @throws Exception
	*/
	@RequestMapping(value="/fileupload2")
	public String fileupload2(HttpServletRequest request,MultipartFile upload) throws Exception {
		System.out.println("SpringMVC方式的文件上传...");
		// 先获取到要上传的文件目录
		String path = request.getSession().getServletContext().getRealPath("/uploads");
		// 创建File对象,一会向该路径下上传文件
		File file = new File(path);
		// 判断路径是否存在,如果不存在,创建该路径
		if(!file.exists()) {
			file.mkdirs();
		}
		// 获取到上传文件的名称
		String filename = upload.getOriginalFilename();
		String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
		// 把文件的名称唯一化
		filename = uuid+"_"+filename;
		// 上传文件
		upload.transferTo(new File(file,filename));
		return "success";
	}
  1. 配置文件解析器对象
<!-- 配置文件解析器对象,要求id名称必须是multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
</bean>
SpringMVC跨服务器方式文件上传
  1. 搭建图片服务器
    1. 根据文档配置tomcat9的服务器,现在是2个服务器
    2. 导入资料中day02_springmvc5_02image项目,作为图片服务器使用
  2. 实现SpringMVC跨服务器方式文件上传
    1. 导入开发需要的jar包
	<dependency>
		<groupId>com.sun.jersey</groupId>
		<artifactId>jersey-core</artifactId>
		<version>1.18.1</version>
	</dependency>
	<dependency>
		<groupId>com.sun.jersey</groupId>
		<artifactId>jersey-client</artifactId>
		<version>1.18.1</version>
	</dependency>
  1. 编写文件上传的JSP页面
	<h3>跨服务器的文件上传</h3>
	<form action="user/fileupload3" method="post" enctype="multipart/form-data">
		选择文件:<input type="file" name="upload"/><br/>
		<input type="submit" value="上传文件"/>
	</form>
  1. 编写控制器
	/**
	* SpringMVC跨服务器方式的文件上传
	*
	* @param request
	* @return
	* @throws Exception
	*/
	@RequestMapping(value="/fileupload3")
	public String fileupload3(MultipartFile upload) throws Exception {
		System.out.println("SpringMVC跨服务器方式的文件上传...");
		// 定义图片服务器的请求路径
		String path = "http://localhost:9090/day02_springmvc5_02image/uploads/";
		// 获取到上传文件的名称
		String filename = upload.getOriginalFilename();
		String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
		// 把文件的名称唯一化
		filename = uuid+"_"+filename;
		// 向图片服务器上传文件
		// 创建客户端对象
		Client client = Client.create();
		// 连接图片服务器
		WebResource webResource = client.resource(path+filename);
		// 上传文件
		webResource.put(upload.getBytes());
		return "success";
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值