【发布时间】:2016-12-15 09:31:44
【问题描述】:
我正在使用Oreilly MultipartRequest servlet 来解析表单多部分/表单数据请求:
String path = getServletContext().getRealPath("/tmp");
List uploadFiles = new ArrayList();
MultipartRequest multi = new MultipartRequest(request, path, 50 * 1024 * 1024, "UTF-8");
Enumeration<String> params = multi.getParameterNames();
Enumeration<String> files = multi.getFileNames();
//retrieve text parameters
String param;
while(params .hasMoreElements()){
param = params .nextElement();
for(String occurence : multi.getParameterValues(param)){
pageContext.setAttribute(param, occurence);
}
}
//get files
String fileParam;
while(files.hasMoreElements()){
fileParam = files.nextElement();
uploadFiles.add(multi.getFile(fileParam));
}
我能够获取所有数据,但关于文件,我想将它们作为附件发送,通常是这样完成的(通过解析 request)
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
try {
List fileItemsList = servletFileUpload.parseRequest(request);
Iterator it = fileItemsList.iterator();
while (it.hasNext()){
FileItem fileItem = (FileItem)it.next();
if (fileItem.isFormField()){
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(fileItem.getString());
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileItem.getFieldName());
multipart.addBodyPart(messageBodyPart);
}
}
} catch(Exception e) {
out.println(e.toString());
}
相反,我正在创建要上传的所有文件uploadFiles 的列表。问题是附件使用FileItem 接口,它允许我使用getString() 将文件项的内容作为字符串获取,而Oreilly MultipartRequest 仅将文件作为File 对象返回。如何类似地使用File 对象的内容,或者将其转换为FileItem 对象。
【问题讨论】:
标签: java apache servlets file-upload