首先,要使用JSP选择要上载的文件,您至少需要一个<input type="file">显示文件浏览字段的HTML 元素.如HTML表单规范中所述,您需要在父元素中设置请求方法POST和请求编码.multipart/form-data<form>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
因为在Servlet 3.0之前Servlet API默认不支持上述请求编码(我认为你没有使用它,因为EJB 3.0是Java EE 5.0的一部分,而Java EE 5.0又只包含Servlet 2.5),所以你赢了看到请求参数映射中的任何内容.在request.getParameter("file")将返回null.
要检索上传的文件,并在一个servlet其他请求参数,你需要解析InputStream的的HttpServletRequest自己.幸运的是,有一个常用的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());
}
}
Run Code Online (Sandbox Code Playgroud)
基本上你只需InputStream要从FileItem对象中获取并OutputStream使用通常的Java IO方式将其写入任何您喜欢的东西.
InputStream content = item.getInputStream();
Run Code Online (Sandbox Code Playgroud)
或者你也可以直接写它:
item.write(new File("/uploads/filename.ext"));
Run Code Online (Sandbox Code Playgroud)
在他们的主页上,您可以在" 用户指南"和" 常见问题解答"部分找到许多代码示例和重要提示和技巧.仔细阅读它们.
| 归档时间: |
|
| 查看次数: |
6999 次 |
| 最近记录: |