java File to FileItem

时间:2011-07-26 16:02:12

标签: java servlets file-upload

如何将文件类型转换为 FileItem 键入Servlet?

File file = new File("/home/kunal/Desktop/docs");        
File[] files = file.listFiles();

我想将文件转换为FileItem Type。

由于

2 个答案:

答案 0 :(得分:4)

我认为这里存在一个重大的误解。

根据评论:

  

以前我使用的是FileUpload控件,其中我使用的是FileItem类型。但现在我必须使用批量上传的文件类型,所以我想将File转换为FileItem。

您显然正在使用MSIE浏览器来测试您的webapp。 MSIE具有错误行为,它发送完整的文件路径,而不是仅发送<input type="file">控件的文件名。您显然是在服务器端构建基于客户端基本文件夹的File并尝试在其上调用listFiles()以获取客户端文件系统上所有文件的列表,以便您可以“批量上传”他们。

这不起作用。如果可能的话,那将是一个巨大的安全漏洞。您不能无意中从客户端文件系统中退出所有文件的列表。只有当webserver和webbrowser在物理上相同的机器上运行时,它才有效。

另见:


至于您的具体功能要求,我了解您希望能够让客户端选择一个文件夹,然后将该文件夹中的所有文件发送到服务器端。 HTML4 <input type="file">控件确实不支持这一点,它只允许单个文件选择。但是,如果您定位HTML5浏览器(FF&gt; = 3.6,Chrome&gt; = 2,Safari&gt; = 4),那么您可以使用multiple attribute

<input type="file" name="upload" multiple="multiple" />

但是如果你想支持旧的浏览器(和MSIE),你最好的选择是Flash或Java Applet解决方案,以便能够选择一个或多个文件夹。例如:UploadifySWFUploadJUploadJumpLoader

无论如何,servlet代码应该以任何方式更改。它应该像以前一样坚持使用Apache Commons FileUpload API。它也适用于HTML5 multiple,Flash和Java Applet解决方案。唯一的区别是您现在可以获得多个FileItem个对象,每个上传的文件对应一个。

另见:

答案 1 :(得分:1)

如果我理解这一点,听起来您正在尝试使用Apache Commons FileUpload将文件上传到您的servlet。虽然这不能直接回答您的问题,但您可以尝试使用@MultipartConfig注释,而不是Apache Commons。

@MultipartConfig
public class Foo extends HttpServlet{
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         Part p = request.getPart("uploadInput");

}

然后您可以执行p.getInputStream()来读取文件,其中“uploadInput”是HTML页面上的上传元素。然后,您可以手动构建File对象,或者做您需要做的任何事情。这样做的另一个好处就是不使用第三方库,这有时会很尴尬。