当前位置: 首页 > 面试题库 >

用Servlet上传文件?

孙言
2023-03-14
问题内容

注意:

在阅读此问题及其答案之前,请检查您的输入元素具有name属性。

我正在尝试使用servlet上传文件。Eclipse控制台未显示任何错误。但是文件没有被上传。对我来说,似乎一切都很好。但是我在某个地方犯了错误。

在控制台我得到

Inside Servlet //Printed by code
Items: [] // Printed by Cdoe

HTML代码

<form action="ImageUploadServlet" method="post" enctype="multipart/form-data">
<table>
<tr>
  <td><label>Select Image: </label></td>
  <td><input type="file" id="sourceImage" /></td>
   <tr>
        <td colspan="3">
         <input type="submit" value="Upload"/><span id="result"></span>
        </td>
      </tr> 
</table>
</form>

Servlet代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
    System.out.println("Inside Servlet");
    if(!isMultiPart){
        System.out.println("Form type is not multipart/form-data");
        System.out.println("File Not Uploaded");
    }
    else
    {
        FileItemFactory dfit = new DiskFileItemFactory();
        ServletFileUpload sfu = new ServletFileUpload(dfit);
        List aList = null;

        try {
            aList = sfu.parseRequest(request);
            System.out.println("Items: "+aList);
        } 
        catch (FileUploadException fue) 
        {
            fue.printStackTrace();
        }

        Iterator itr = aList.iterator();
        while(itr.hasNext())
        {
            FileItem fi = (FileItem) itr.next();
            if(fi.isFormField())
            {
                System.out.println("File Name: "+fi.getFieldName());
                System.out.println("File Size: "+fi.getSize());

                try 
                {
                    File f = new File("D:/MyUploads/", fi.getName());
                    fi.write(f);
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
            else
            {
                System.out.println("It's Not Form Item;");
            }
        }
    }
}
}

任何建议,将不胜感激。

谢谢!


问题答案:

有两个问题:

首先,您需要给该字段一个name。然后它将成为请求参数名称。

<input type="file" id="sourceImage" name="sourceImage" />

其次,在根据commons fileupload
guide
else情况下,您需要处理文件上传。您的代码当前忽略它们,仅执行sysout。FileItem#isFormField()

if (item.isFormField()) {
    // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
    String fieldname = item.getFieldName();
    String fieldvalue = item.getString();
    // ... (do your regular form field processing job here)
} else {
    // Process form file field (input type="file").
    String fieldname = item.getFieldName();
    String filename = FilenameUtils.getName(item.getName());
    // ... (do your uploaded file job here)
    File file = new File("D:/MyUploads/", filename);
    item.write(file);
}

请注意,您需要使用FilenameUtils#getName()来提取文件名,因为MSIE浏览器会错误地沿着文件名发送完整的客户端文件路径。另请参阅CommonsFileUpload FAQ。

您还需要记住,这种方法将覆盖任何以前使用相同名称上传的文件。您可能需要在文件名中添加自动生成的后缀。



 类似资料:
  • Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。 本文使用到的文件有: upload.jsp : 文件上传表单。 message.jsp : 上传成功后跳转页面。 UploadServlet.java : 上传处理 Servlet。 需要引入的 jar 文件:commons-fileupload-1.3.2、com

  • 问题内容: 我的问题有点说明了一切。我目前正在成功地将Uploadify(Flash + Ajax)用于Servlet(带有OWASP ESAPI覆盖的公共上传),但是我想知道如何构建HTML5支持,或者说具有Flash支持的HTML5。 我知道如何使HTML5 DnD正常工作,但是我不太了解Java Servlet连接和/或后端的机制。我搜索了很多地方,但找不到任何答案,因此,我们将不胜感激。

  • 本文向大家介绍Jsp+Servlet实现文件上传下载 文件上传(一),包括了Jsp+Servlet实现文件上传下载 文件上传(一)的使用技巧和注意事项,需要的朋友参考一下 文件上传和下载功能是Java Web必备技能,很实用。 本文使用的是Apache下的著名的文件上传组件 org.apache.commons.fileupload 实现 下面结合最近看到的一些资料以及自己的尝试,先写第一篇文件上

  • 问题内容: 如何使用jsp或者Servlet上传文件到服务器? 问题答案: 介绍 要浏览并选择要上传的文件,你需要·在表单中有一个HTML 字段。如HTML规范中所述,你必须使用方法,并且表单的属性必须设置为。 提交此类表单后,二进制多部分表单数据在请求正文中的使用方式与enctype未设置时的格式不同。 在Servlet 3.0之前,Servlet API本身不支持。它仅支持默认格式。使用多部分

  • 本文向大家介绍Servlet实现简单文件上传功能,包括了Servlet实现简单文件上传功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Servlet文件上传的具体代码,供大家参考,具体内容如下 两点要素: 1.表单提交方式必须是post 2.enctype一定要是multipart/form-data。 enctype的默认值是application/x-www-form-url

  • 本文向大家介绍servlet上传文件实现代码详解(四),包括了servlet上传文件实现代码详解(四)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了servlet上传文件的具体代码,供大家参考,具体内容如下 1.servlet上传文件   servlet上传文件就是将客户端的文件上传到服务器端。   向服务器发送数据时,客户端发送的http请求正文采用“multipart/form