我想使用JSP Servlet和ejb 3.0
上传一个Image答案 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 Guide和Frequently Asked Questions部分找到大量代码示例以及重要提示和技巧。仔细阅读它们。