一,上传文件
1.在jsp页面准备上传文件的标签
<input type=“file" name="uploads">
2.准备上传文件的模型驱动(在Action中写)
private File[] uploads; //上传文件,如果上传单个文件可以用File
private String[] uploadsFileName; //上传文件名
private String[] uploadsContentType;//上传文件类型
public File[] getUploads() {
return uploads;
}
public void setUploads(File[] uploads) {
this.uploads = uploads;
}
public String[] getUploadsFileName() {
return uploadsFileName;
}
public void setUploadsFileName(String[] uploadsFileName) {
this.uploadsFileName = uploadsFileName;
}
public String[] getUploadsContentType() {
return uploadsContentType;
}
public void setUploadsContentType(String[] uploadsContentType) {
this.uploadsContentType = uploadsContentType;
}
3.上传的service逻辑代码
private void saveUserFile(ElecUser elecUser) {
//上传时间
Date progressTime = new Date();
//取得所有要上传的文件信息
File[] uploads = elecUser.getUploads(); //上传文件
String[] uploadsFileName = elecUser.getUploadsFileName();//上传文件名
String[] uploadsContentType = elecUser.getUploadsContentType();//上传文件类型
//遍历所有的文件,
if(uploads!=null && uploads.length>0){
for(int i=0;i<uploads.length;i++){
//组织PO对象进行保存
ElecUserFile elecUserFile = new ElecUserFile();
elecUserFile.setFileName(uploadsFileName[i]);//上传文件名
elecUserFile.setProgressTime(progressTime);//文件上传时间
//上传文件并获得上传文件的路径
String path = FileUtil.uploadFileAndReturnPath(uploads[i],uploadsFileName[i],"用户管理");
elecUserFile.setFileURL(path);//文件上传路径
elecUserFile.setElecUser(elecUser);//设置与elecUser的关联关系,由于关系由多的一方维护,故在此设置
//保存上传文件信息
elecUserFileDao.save(elecUserFile);
}
}
}
4.uploadFileAndReturnPath核心方法内容
public static String uploadFileAndReturnPath(File upload, String fileName,
String model) {
//取得上传文件的统计路径,即upload
String basepath = ServletActionContext.getServletContext().getRealPath("/upload");
//取得日期生产的路径
String datePath = DateUtil.dateToStringByFile( new Date());
//取得文件上传的全路径
String filePath = basepath+datePath+model;
//查看该目录是否存在,如果不存在就创建
File filedir = new File(filePath);
if(!filedir.exists()){
filedir.mkdirs();//创建多次目录
}
//组合上传文件名+uuid
String uuidFileName = UUID.randomUUID().toString()+"_"+fileName;
//创建上传的目标文件
File destfile = new File(filePath,uuidFileName);
//上传文件
upload.renameTo(destfile);
return "/upload"+datePath+model+"/"+uuidFileName;
}
二,文件下载的配置
一,下载的模型驱动设置
//文件下载流
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
二 ,Action的下载方法
public String download() throws Exception{
/*使用sturts框架下载*/
String fileId = elecUser.getFileId();
//采用javaweb的方式下载
//根据id取得elecUserFile对象
ElecUserFile elecUserFile = elecUserService.findElecUserFileByFileId(fileId);
//取得文件下载路径
String filePath = ServletActionContext.getServletContext().getRealPath("")+ elecUserFile.getFileURL();
//取得下载文件名
String filename = elecUserFile.getFileName();
//对中文文件名的处理
filename = new String(filename.getBytes("gbk"),"iso-8859-1");
request.setAttribute("filename",filename);
elecUser.setInputStream(new FileInputStream(new File(filePath)));
return "download";
}
三,struts2中下载的配置
<result name="download" type="stream">
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${#request.filename}"</param>
<param name="bufferSize">1024</param>
</result>
四,关于上传文件大小的配置(这会影响文件的上传是否能成功)
<!-- 配置上传文件的大小为10MB -->
<constant name="struts.multipart.maxSize" value="10000000"></constant>