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("/");
。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值