21xrx.com
2024-12-22 23:27:56 Sunday
登录
文章检索 我的文章 写文章
我最近在学习JavaWeb开发
2023-06-11 07:54:27 深夜i     --     --
Java 文件上传 multipart/form-data

我最近在学习JavaWeb开发,其中一个重要的功能就是实现文件上传。在本文中,我将分享如何使用Java实现上传功能。

一、HTML表单

首先,我们需要在HTML表单中设置enctype属性为“multipart/form-data”,这样可以告诉服务器需要支持文件上传。


 

 

在表单中设置了文件上传的input标签是type="file",name属性是必须的,因为后台需要通过这个name来获取上传的文件。

二、Java后台处理

接下来是后台处理部分,我们可以使用Apache Commons FileUpload工具库,来解析上传的文件。

首先,我们需要添加Maven的依赖:

xml

  commons-fileupload

  commons-fileupload

  1.4

然后,我们可以在Java代码中添加以下代码来处理上传文件:


ServletFileUpload upload = new ServletFileUpload();

FileItemIterator iter = upload.getItemIterator(request);

while (iter.hasNext()) {

 FileItemStream item = iter.next();

 String name = item.getFieldName();

 InputStream stream = item.openStream();

 if (!item.isFormField()) {

  OutputStream out = new FileOutputStream(new File("uploadedFiles",

    item.getName()));

  IOUtils.copy(stream, out);

  IOUtils.closeQuietly(out);

 } else {

  String value = IOUtils.toString(stream);

  System.out.println(name + ": " + value);

 }

}

这里我们首先使用ServletFileUpload类创建一个Upload实例,并且使用getFileItemIterator方法来获取上传的文件流。在while循环中,我们可以通过isFormField方法来区分文件和参数,当它是参数时,我们可以使用IOUtils工具类将流转换成字符串,这样就能够获取到参数了。若它是文件,则使用IOUtils将流复制到文件上。

三、处理文件多个上传

如果想要上传多个文件,我们可以修改Java代码中处理上传文件的方法:


ServletFileUpload upload = new ServletFileUpload();

List items = upload.parseRequest(request);

for (FileItem item : items) {

 if (!item.isFormField()) {

  OutputStream out = new FileOutputStream(new File("uploadedFiles",

    item.getName()));

  IOUtils.copy(item.getInputStream(), out);

  IOUtils.closeQuietly(out);

 }

}

我们使用parseRequest方法获取所有的文件项,并且使用for循环处理每个文件。同时,我们使用getInputStream方法获取文件流,并且使用IOUtils复制到文件上,这样就能够实现多个文件上传了。

总结

实现Java文件上传的关键在于编写HTML表单的格式以及Java后台的处理。我们可以使用FileUpload工具类来帮助我们实现处理。同时,注意文件上传不要超过服务器的文件大小限制。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复