如何使用JSP -Servlet和EJB 3.0上载映像

时间:2010-05-13 13:31:00

标签: image jsp servlets upload

我想使用JSP Servlet和ejb 3.0

上传一个Image

1 个答案:

答案 0 :(得分:6)

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

<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的一部分,后者又包含Servlet 2.5只有),您将不会在请求参数映射中看到任何内容。 request.getParameter("file")将返回null

要在servlet中检索上传的文件和其他请求参数,您需要自己解析InputStream的{​​{1}}。幸运的是,有一个常用的API,可以从您手中完成繁琐的工作:Apache Commons FileUpload

HttpServletRequest

基本上,您只需要从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()); } } 对象中获取InputStream并使用通常的Java IO方式将其写入任何FileItem

OutputStream

或者您也可以直接书写:

InputStream content = item.getInputStream();

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

相关问题