多部分上传文件servlet

bha*_*ard 7 java servlets file-upload

如何上传文件并获取表单的其他参数?我想在Java servlet中处理多部分请求.

Bal*_*usC 12

要浏览并选择要上传的文件,您需要<input type="file">在表单中添加一个字段.如HTML规范中所述,您需要使用该POST方法,并且必须将表单的enctype属性设置为multipart/form-data.

<form action="uploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

提交此类表格后,表格数据可以多部分格式提供HttpServletRequest#getInputStream().为了测试(!),您可以使用以下代码段读取流:

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
for (String line; (line = reader.readLine()) != null;) {
    System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)

但是,您需要逐字节解析流(而不是char的char).在新的Servlet 3.0 API之前,标准的Servlet API没有提供任何内置工具来解析它们.普通表单字段也不常用request.getParameter(),它们包含在多部分表单数据流中.

如果你还没有使用Servlet 3.0(只有不到2个monts),那么你需要自己解析流.解析这样的流需要有关如何指定和构造多部分表单数据请求的精确背景知识.要创建一个完美的多部分解析器,您必须编写大量代码.但幸运的是,Apache Commons FileUpload已经证明了它多年来的强大功能.仔细阅读" 用户指南"和" 常见问题解答"以查找代码示例并了解如何将其用于最佳程度(将MSIE考虑在内!).


Jus*_*rls 5

步骤1

阅读adatapost的帖子.

第2步

查看Apache Commons FileUpload项目.

O'Reily有一个类似可行的解决方案,但它的使用许可要求你买一本书,即使这个要求是如此清晰,我也不会用另一个链接受益.