java文件上传处理

文件上传本身其实并不复杂,但是它会牵涉到很多细节上的处理,加起来就比较复杂了。
主要用到的技术有:
dwr2
spring2.5
ibatis2
spring mvc
jquery
下面将分步进行说明:
1. 上传文件。
在spring 配置文件中声明上传文件的bean:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize">
			<value>1000000</value>
		</property>
	</bean>


在jsp页面中定义字段:
<input id="fileData" type="file" name="fileData"/>

JS验证扩展名:
        var image =$("#fileData").val();
  	if(image!=''){
	  var checkimg = image.toLowerCase();
	  if (!checkimg.match(/(\.jpg|\.png|\.JPG|\.PNG|\.gif|\.GIF|\.jpeg|\.JPEG)$/)){
	 	alert("请选择以下扩展名图片 .jpg,.png,.jpeg,.gif");
	 	$("#fileData").focus();
	 	return false;
	}

在实体对象中定义MultipartFile属性:
private MultipartFile fileData;
public MultipartFile getFileData() {
  return fileData;
}
public void setFileData(MultipartFile fileData) {
  this.fileData = fileData;
}


在控制器中,可以使用命令对象的方式来绑定属性,但在2.5中使用了MultiActionController,所以绑定
对象直接使用bind()方法,如:
User user = new User();
super.bind(request, user);
MultipartFile fileData= user.getFileData();
byte[] data = fileData.getBytes();


一般会有一个文件名,即重新命名上传文件的文件名:
private String getFileName(MultipartFile fileData){
		//上传的文件名
		String uploadFileName = fileData.getOriginalFilename();
		String extensionName = uploadFileName.split("\\.")[1];
		UUID uuid = UUID.randomUUID();
		return uuid.toString()+"."+extensionName;
	}

上面采用了uuid的命名方式,这样至少要比用id来命名快一些,一般也不会出现重复。

2.ibatis中,在执行更新操作时,如果没有再次选择文件,则不要更新上传的文件字段。即在ibatis的update中:
<isNotEmpty property="staffIcon">
    STAFF_ICON = #staffIcon:VARCHAR#,
</isNotEmpty>


3.在JSP页面中,通过dwr删除文件。
function removeStaffIcon(){
			var staffId = $("#staffId").val();
			staffService.deleteStaffIcon(staffId,function(data){
				if(eval(data)){
					alert("删除成功!");
					$("#deleteStaffIcon").remove();
				}else{
					alert("删除失败! ");
				}
			});
		}


<c:if test="${!empty staff.staffIcon}">
	
  <div id="deleteStaffIcon">
    <a href="<%=path%>/pages/basedata/dep/stafficon  /${staff.staffIcon}">${staff.staffIcon}
</a>
    <a onclick="removeStaffIcon();" href="javascript:void(0);">
	<img border="0" alt="删除" src="<%=path%>/images/btn_delete.png">
    </a>
  </div>
</c:if>


4.在删除文件时,既要删除图片文件夹中的文件,也要将此字段的值设为空。在dwr中先获得
HttpServletRequest 即可知道文件存放路径。
WebContext context = WebContextFactory.get();
		HttpServletRequest request = context.getHttpServletRequest();
		String realPath = request.getSession().getServletContext().getRealPath("/");
。。。。

你可能感兴趣的:(java,spring,jquery,ibatis,DWR)