Struts2会解析封装Requset
Servlet获取的Requset形式为 org.apache.catalina.connector.RequestFacade
Struts2重新封装过的Request的形式为 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
原本Servlet的保存文件的代码:
private boolean saveFileToFolder(HttpServletRequest request, TechWms techWms) throws Exception {
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
String fileName = "";
String filePath = "";
Iterator iter2 = items.iterator();
while (iter2.hasNext()) {
FileItem item = (FileItem) iter2.next();
if (item.isFormField()) {
} else {
fileName = item.getName();
FileManager fileManager = new FileManager();
String photopath = "/resources/uploads/THUMBNAIL/";
String tpath = request.getSession().getServletContext().getRealPath(photopath);
String random = IdTool.getId();
File uploadedFile = fileManager.createDirectory(tpath);
filePath = tpath + "\\" + random+fileName;
uploadedFile = new File(filePath);
item.write(uploadedFile);
techWms.setThumbnail("THUMBNAIL/" +fileName);
this.getTechWmsServices().save(techWms);
}
}
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
经过封装的Request在 upload.parseRequest(request) 这一步的时候会返回空值。值的一提的是,这个步骤在Struts2进行封装的时候已经执行过了。
其实Struts2对于Request的封装有简化文件上传的功能在里面,仔细看封装过的Request便可知:
网上有很多方法,去除封装之类的。个人认为在不是受到很大局限的情况下,变更为Struts2下的文件上传写法是最理想的,代码如下,两段代码完成的相同功能:
public boolean savefile(TechWms techWms){
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) getRequest();
File file = wrapper.getFiles("Filedata")[0];
String fileName = wrapper.getParameter("Filename");
try {
String savePath = ServletActionContext.getServletContext().getRealPath("resources/uploads/THUMBNAIL/");
InputStream in = new FileInputStream(file);
File uploadFile = new File(savePath, fileName);
OutputStream out = new FileOutputStream(uploadFile);
byte[] buffer = new byte[1024 * 1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.close();
techWms.setThumbnail("THUMBNAIL/" +fileName);
this.getTechWmsServices().save(techWms);
return true;
} catch (FileNotFoundException ex) {
ex.printStackTrace();
return false;
} catch (IOException ex) {
ex.printStackTrace();
return false;
}
}