javaweb中的文件上传之fileupload组件

  今天我们来说一说如何完成文件上传。

  1.概述

  ① 文件上传指的是将文件通过浏览器传输到服务器或者指定的磁盘中。

  ② 在一个表单中我们首先要使用file组件来上传,因为get请求无法携带大数据的请求参数,所以必须使用post方式,然后表单的编码方式也必须设置为encrytype="multipy/form-data"(这个是浏览器发送文件到服务器时,文件的编码格式为二进制的意思),这样我们就可以在服务器端的Servlet中进行接收了,但是无法再使用request.getParameter()的方式来接收,因为数据传输的格式已经变为二进制了,此时应该用request.getInputStream()的方式来接收获取参数文件的二进制流。之后再进行其他操作。

  需要注意的是:虽然这种方式也可以完成文件的上传,但是我们不推荐使用这种原始的reqeust.getInputStream()来获取上传的文件,因为它处理起来太单调,无法像fileupload组件可以设置形如:最大上传文件大小等参数。

  ③ 我们推荐使用:fileupload组件完成文件的上传。

  2.fileupload组件完成上传

  ① 使用准备:导入common-fileupload.jar和common-io.jar包的导入

  ② 基本思路:

  我们可以通过common-fileupload组件当中的API获取一个由FileItem组成的额List,然后调用每一个FileItem的isFormFiled()方法判断当前的这个FileItem是一个表单域(非文件上传组件)还是一个文件域(文件上传组件),如果是表达域,可以通过FIleItem的getFiledName()和getFiledValue()获取表单当中的名称和值。如果是文件域,可以通过FileItem获取属性名,文件名,内容类型,是否在内存中,上传文件的大小,文件内容的输入流等等信息。

  3.获取FileItem组成的List

  两种方式

  ① 简单方式

  FileItemFactory factory = new DiskFileItemFactry();--获取FileItem的创建工厂FileItemFactory

  ServletFileUpload upload =new ServleFileUpload(factory);  --将FileItem的创建工厂实例传入到ServletFileUpload实例中进行初始化

  List<FileItem> items = upload.parseRequest(request);  --从请求reqeust中将上传的二进制文件转换为FileItem对象

  ② 复杂方式

  FileItemFactory factory = new DiskFileItemFactry();--获取FileItem的创建工厂FileItemFactory

  factory.setThreshold(设置文件上传时允许的最大值,若超过,则将文件放入指定的临时磁盘目录下)

  factory.setRepository(设置临时磁盘的位置)

  ServletFileUpload upload =new ServleFileUpload(factory);  --将FileItem的创建工厂实例传入到ServletFileUpload实例中进行初始化

  upload.setSizeMax(设置允许上传的文件的总的大小,单位是byte,比特)

  List<FileItem> items = upload.parseRequest(request);  --从请求reqeust中将上传的二进制文件转换为FileItem对象













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaWeb文件上传是指在JavaWeb应用程序实现上传文件的功能。在JavaWeb,一般使用Servlet或者Struts等框架来实现文件上传实现文件上传的基本步骤如下: 1. 在HTML表单设置文件上传的属性 enctype="multipart/form-data"。 2. 在Servlet或Struts Action获取上传的文件。可以使用 Apache Commons FileUpload 组件来获取上传的文件。 3. 获取上传的文件名、文件大小、文件类型等信息。 4. 将上传的文件保存到指定的路径。 下面是一个基本的Servlet实现文件上传的示例代码: ``` public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String savePath = "D:/uploads"; // 上传文件的保存路径 File file = new File(savePath); if (!file.exists()) { file.mkdir(); } DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); if (!ServletFileUpload.isMultipartContent(request)) { return; } try { List<FileItem> list = upload.parseRequest(request); for (FileItem item : list) { if (!item.isFormField()) { String fileName = item.getName(); long fileSize = item.getSize(); String fileType = fileName.substring(fileName.lastIndexOf(".") + 1); String filePath = savePath + File.separator + fileName; File uploadedFile = new File(filePath); item.write(uploadedFile); response.getWriter().write("文件上传成功!文件名:" + fileName + ",文件大小:" + fileSize + ",文件类型:" + fileType); } } } catch (Exception e) { e.printStackTrace(); response.getWriter().write("文件上传失败!"); } } } ``` 在上面的代码,使用了 Apache Commons FileUpload 组件来获取上传的文件。首先创建了一个 DiskFileItemFactory 对象,然后通过 ServletFileUpload 对象来解析上传的请求。在解析完请求后,遍历获取到的文件列表,将文件保存到指定的路径。 需要注意的是,上传的文件名可能包含路径信息,因此需要进行处理。此外,为了防止文件名含有文时出现乱码,需要设置编码为 UTF-8。 以上就是JavaWeb文件上传的基本实现方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值