【问题标题】:How to upload an image using JSP -Servlet and EJB 3.0 [duplicate]如何使用 JSP -Servlet 和 EJB 3.0 上传图像 [重复]
【发布时间】:2010-05-13 13:30:59
【问题描述】:

我想使用 JSP Servlet 和 ejb 3.0 上传图片

【问题讨论】:

标签: image jsp servlets upload


【解决方案1】:

首先,要使用 JSP 选择要上传的文件,您至少需要一个 HTML <input type="file"> 元素,该元素将显示文件浏览字段。如HTML forms spec 中所述,您需要在父<form> 元素中将请求方法设置为POST,并将请求编码设置为multipart/form-data

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>

因为Servlet 3.0 之前的 Servlet API 默认不支持上述请求编码(我认为您没有使用它,因为 EJB 3.0 是 Java EE 5.0 的一部分,而 Java EE 5.0 又只包含 Servlet 2.5) ,您不会在请求参数映射中看到任何内容。 request.getParameter("file") 将返回 null

要在servlet中检索上传的文件和其他请求参数,您需要自己解析HttpServletRequestInputStream。幸运的是,有一个常用的 API 可以帮助您摆脱繁琐的工作:Apache Commons FileUpload

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
    if (!item.isFormField()) {
        // <input type="file">
        System.out.println("Field name: " + item.getFieldName());
        System.out.println("File name: " + item.getName());
        System.out.println("File size: " + item.getSize());
        System.out.println("File type: " + item.getContentType());
    } else {
        // <input type="text|submit|hidden|password|button">, <select>, <textarea>, <button>
        System.out.println("Field name: " + item.getFieldName());
        System.out.println("Field value: " + item.getString());
    }            
}

基本上您只需要从FileItem 对象中获取InputStream,然后使用通常的Java IO 方式将其写入任何OutputStream

InputStream content = item.getInputStream();

或者你也可以直接写:

item.write(new File("/uploads/filename.ext"));

在他们的主页上,您可以在User GuideFrequently Asked Questions 部分找到大量代码示例和重要提示和技巧。仔细阅读它们。

【讨论】:

  • 非常感谢您的建议!我将研究 Commons Fileload 并尝试在我的应用程序中实现,然后我会回来的。小心!乔治
  • +1。我要补充一点,您需要添加@SuppressWarnings("unchecked") 来处理第一行代码,因为parseRequest() 只返回一个List
  • 我已经实现了你的代码,但是它抛出了 FileNotFound 异常
猜你喜欢
  • 2014-03-21
  • 2015-06-18
  • 1970-01-01
  • 2013-12-09
  • 2014-02-24
  • 2012-02-10
  • 2013-04-06
  • 2014-12-04
  • 1970-01-01
相关资源
最近更新 更多