SpringMVC-上传文件

本文深入讲解了传统Servlet和SpringMVC两种方式的文件上传过程,包括前端表单设置、后端解析请求、文件存储及跨服务器存储技术。通过具体代码示例,详细介绍了如何处理文件上传,适用于Web应用开发人员。
摘要由CSDN通过智能技术生成

传统Servlet方式上传文件

前端页面:
注意要设置表单enctype属性:
enctype=“multipart/form-data”
(将数据以多段的形式发送)。

enctype : 属性规定在发送到服务器之前应该如何对表单数据进行编码。
multipart/form-data : 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。

<form action="user/fileupload" method="post" enctype="multipart/form-data">
	选择文件:<input type="file" name="upload"/><br/>
	<input type="submit" value="上传文件"/>
</form>

后端处理:

  1. 获取目标存放目录,不存在则创建
  2. 获取servlet上传文件工具
  3. 解析Request域,获取List < FileItem > 对象
  4. 每个FileItem存着表单每一项的具体信息
  5. FileItem通过流的形式写出,并释放
/**
* 文件上传 
* @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上传文件

springMVC直接将request对象解析这一步骤通过前端控制器调用文件解析器帮我们做了,直接传递了一个MultipartFile对象给我们,MultipartFile封装着文件内容。

1. 文件解析器,id名称必须是multipartResolver
<!-- 配置文件解析器对象,要求id名称必须是multipartResolver --> 
<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
	<property name="maxUploadSize" value="10485760"/> 
</bean> 
2. 前端也同样需要设置表单enctype属性:

enctype=“multipart/form-data”

<form action="upload" method="post" enctype="multipart/form-data">
        <input name="name" value="eddie"><br/>
        选择文件:<input type="file" name="upload"><br/>
        <input type="submit">
    </form>
3. 后端:
/**
* SpringMVC方式的文件上传 
*
* @param request 
* @return 
* @throws Exception 
*/ 
@RequestMapping(value="/fileupload") 
public String fileupload(HttpServletRequest request, @RequestParam("upload")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"; 
} 

跨服务器存储文件

跨服务器需要的jar包

<dependency> 
	<groupId>com.sun.jersey</groupId> 
	<artifactId>jersey-core</artifactId> 
	<version></version> 
</dependency> 
<dependency> 
	<groupId>com.sun.jersey</groupId> 
	<artifactId>jersey-client</artifactId> 
	<version></version> 
</dependency> 

步骤:

  1. 把Path目录设置为图片存储服务器的文件目录
// 定义图片服务器的请求路径
String path = "http://localhost:8080/fileServer/uploads/";
  1. 通过WebResource和Client上传文件
// 创建客户端对象 
Client client = Client.create(); 
// 连接图片服务器 
WebResource webResource = client.resource(path+filename); 
// 上传文件 
webResource.put(upload.getBytes());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值