在form里定义一个formfile的对象, protected FormFile file;
在页面里写: <tr>
<th>
<Myapp:label key="uploadForm.file"/>
</th>
<td>
<html:file property="file" size="50" styleId="file" />
</td>
</tr>
action里:
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
if (log.isDebugEnabled()) {
log.debug("Entering 'save' method");
}
// Extract attributes and parameters we will need
ActionMessages messages = new ActionMessages();
DocumentForm documentForm = (DocumentForm) form;
boolean isNew = ("".equals(documentForm.getDocumentid()) || documentForm.getDocumentid() == null);
DocumentManager mgr = (DocumentManager) getBean("documentManager");
String encoding = request.getCharacterEncoding();
if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8"))) {
response.setContentType("text/html; charset=utf-8");
}
DocumentForm theForm = (DocumentForm) form;
//retrieve the file representation
FormFile file = theForm.getFile();
//retrieve the file name
String fileName = file.getFileName();
String location = null;
// the directory to upload to
String uploadDir =
servlet.getServletContext().getRealPath("/resources") + "/"
+ request.getRemoteUser() + "/";
//write the file to the file specified
File dirPath = new File(uploadDir);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
//retrieve the file data
InputStream stream = file.getInputStream();
//write the file to the file specified
OutputStream bos = new FileOutputStream(uploadDir + fileName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
theForm.setPath(uploadDir);
bos.close();
location = dirPath.getAbsolutePath()
+ Constants.FILE_SEP + file.getFileName();
System.out.println("location..................."+ location);
//close the stream
stream.close();
//destroy the temporary file created
file.destroy();
Document document = (Document) convert(documentForm);
mgr.saveDocument(document);
// add success messages
if (isNew) {
messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("document.added"));
// save messages in session to survive a redirect
saveMessages(request.getSession(), messages);
return mapping.findForward("search");
} else {
messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("document.updated"));
saveMessages(request, messages);
return mapping.findForward("edit");
}
}
其中上传时遇到一个问题:
javax.servlet.ServletException: BeanUtils.populate
查询后找到答案,在<html:form>是加上这一属性:
enctype="multipart/form-data"
还不知道为什么。
先总结这么多,暂时记一下,过几天来加多文档的上传。