今天项目用到了上传,我的数据库中存放的是文件的URL,所以要在后台做一些处理,之前写过几次上传,感觉代码量太大,今天在网上搜索了一下,用common-fileupload上传会简单许多,摸索一下午之后,终于搞定了,后台代码如下
//上传的文件
private File upload;
//文件名和类型
private String uploadContentType;
private String uploadFileName;
/*这是在action中要写的变量,一定要写,不然会很麻烦,Struts2会自动把要上传的文件,文件名,类型等赋值上去*/
///以下是处理方法
public String uploadStaffImage() throws Exception{
//取文件名和路径,文件名用uuid重命名,防止出现中文乱码现象
String fileName = UUID.randomUUID().toString();
//截取文件类型
String fileType = this.uploadFileName.substring(this.uploadFileName.lastIndexOf("."), this.uploadFileName.length());
//新的文件名
String file = fileName + fileType;
//我存放的目录是在“StaffImg”文件夹下
String path = request.getSession().getServletContext().getRealPath("/StaffImg");
InputStream is = new FileInputStream(getUpload());
//创建输出流,生成新文件
OutputStream os = new FileOutputStream(path + "//" + file);
//写入disk
IOUtils.copy(is, os);
os.flush();
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
//更新数据库中的URL
String imgURL = "StaffImg/"+file;
this.staffFileUpLoadService.updataStaffImgURL(this.staffId, imgURL);
return SUCCESS;
}
一共13行代码,对比之前写的要简洁了许多,方法使用也相对简单。
这个方法只能上传单个文件,批量上传的话,思路是一样的,应该在外层加循环