【问题标题】:Help with file upload in Java/J2EE帮助在 Java/J2EE 中上传文件
【发布时间】:2010-11-02 10:26:09
【问题描述】:
我需要使用带有 ProgressListener 的 Apache fileupload 上传文件,但同时我还需要显示上传状态的进度条。
实际要求是我只需要解析一个本地 XML 文件,将 xml 解析为适当的对象并将它们放入数据库中。我真的需要将文件上传到服务器来解析它吗?当我在我的本地 m/c 上运行良好时遇到异常,例如在远程服务器上找不到文件。
任何快速帮助将不胜感激。
提前致谢!!!
【问题讨论】:
标签:
java
apache
file-upload
【解决方案1】:
如果您可以访问服务器端,我建议您调试上传过程。异常提示您要根据上传的文件名在服务器上打开文件。在您的本地机器上,这是可行的,因为它运行在同一个文件系统上。在服务器端,Apache FileUpload 接收二进制数据,需要从请求数据流中提取:
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory(Integer.MAX_VALUE, null);
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
for (FileItem item : items) {
byte[] data = item.get();
// do something with the binary data
}
} else {
System.err.println("Not a multipart/form-data");
}
}
您还需要以下形式:
【解决方案2】:
从您的描述看来,您的 servlet 正在尝试根据表单中提交的文件名从文件系统本身读取文件。如果 servlet 在与文件所在位置不同的机器上运行,这将不起作用。
确保您的 servlet 从文件上传 API 获取文件内容,而不是从本地文件系统。