Java文件上传-Apache Commons FileUpload工具包极速入门案例

2023-05-05 19:50:22 浏览数 (2)

  • 文件上传的要求
    • form表单属性enctype=“multipart/form-data”
  • 后台使用 HttpServletRequest的getInputStream()方法可以得到撒谎那个村的数据信息,但是需要自行解析流…比较麻烦。而Apache Commons FileUpload工具包对此操作进行了相应的封装,可以直接拿来使用
  • Apache Commons FileUpload使用步骤
    • 创建磁盘文件项工厂对象 DiskFileItemFactory
    • 创建一个ServletFileUpload
    • 解析request
    • 然后保存文件

以下是一个极简的案例:

  • 页面 upload.jsp
代码语言:javascript复制
<form action="upload" method="post" enctype="multipart/form-data">
    <input type="text" name="desc"><br>
    <input type="file" name="file"><br>
    <input type="submit">
</form>
  • 简单的后台代码
代码语言:javascript复制
@WebServlet("/upload")
public class FileServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 创建磁盘文件项工厂
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();

        // 创建一个ServletFileUpload
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);

        // 解析request
        try {
            List<FileItem> fileItems = servletFileUpload.parseRequest(request);

            for (FileItem fileItem : fileItems) {
                if (fileItem.isFormField()) {
                    // 是否为表单输入项
                    String name = fileItem.getFieldName();
                    String value = fileItem.getString();
                    System.out.println("name:"   name   "----value:"   value);
                }else{
                    // 文件
                    // 拿到upload目录代表的File对象
                    File uploadedFile = new File(getServletContext().getRealPath("/upload"));

                    // 目录不存在则先创建一下
                    if (!uploadedFile.exists()) {
                        uploadedFile.mkdirs();
                    }

                    // 创建一个用来保存文件的File对象:在upload目录下使用原始文件名保存
                    // 比如上传的是 a.txt 则保存到 upload目录也是 a.txt(也可以取随机名,自行根据业务操作即可)
                    File file = new File(uploadedFile, fileItem.getName());
					// 写入文件
                    fileItem.write(file);
                }

            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

其实Apache Commons FileUpload工具包还是有些复杂,步骤较多,有一些其他框架比如struts、springmvc都对其进行了封装,可以简化开发步骤。有兴趣的话可以自行查阅官网资料进行学习。

0 人点赞