JavaWeb文件上传

本文介绍了JavaWeb中如何实现文件上传,包括准备工作,如引入commons-fileupload组件和处理IO流的方法;注意事项,如文件安全存放位置和防止覆盖;重点讲解了FileItem类及其常用方法,ServletFileUpload类的使用,以及如何限制文件大小和类型。最后提供了代码实现的概览。
摘要由CSDN通过智能技术生成

准备工作

对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的

需要用到的jar包有commons-fileupload文件上传组件,封装文件上传工具类、(commons-io非必要)处理io流的工具,封装了很多处理io流和文件的方法

注意事项

  1. 为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,例如WEB-INF目录下
  2. 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
  3. 要限制上传文件的最大值
  4. 可以限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法

FileItem类

在HTML页面中input表单必须有

<input type="file" name="upFileOne">

表单如果包含一个文件上传输入项的话,这个表单必须有enctype属性,且值为multipart/form-data

<form enctype="multipart/form-data" method="post" action="${pageContext.request.contextPath}/upload.do">
    用户名<input type="text" name="username">
    <br>
    <input type="file" name="upFileOne">
      <br>
    <input type="submit">
  </form>

浏览器表单的类型如果为multipart/form-data,在服务器端想要获取数据就要通过流

常用方法介绍
//isFormField方法用于判断FileItem类对象封装的数据是一个普通文本表单还是一个文件表单,如果是普通表单则返回true,否则返回false
boolean isFormField();
//getFieldName方法用于返回表单标签name属性的值
String getFieldName();
//getString方法用于将FileItem对象中保存的数据流内容以一个字符串返回
String getString();
//getName方法用于获得文件上传字段中的文件名
String getName();
//以流的形式返回上传文件的数据内容
InputStrieam getInputStream();
//delete方法用来清空FIleItem类对象中存放的主体内容,如果主体内容被保存在临时文件中,delete方法将删除该临时文件
void delete();

ServletFileUpload类

负责处理上传的文件数据,并将表单中每一个输入项封装成一个FileItem对象,使用其parseRequest(httpServletRequest)方法可以将表单中每一个HTML标签提交的数据封装成一个FileItem对象,然后以List列表的形式返回

  • ServletFileUpload类详解
/*ServletFileUpload负责处理上传的文件数据,并将表单中每一个输入项封装成一个FileItem对象,
        *在使用ServletFileUpload对象解析请求时需要DiskFileItemFactory对象,
        *所以,我们需要在进行解析工作前构造好DiskFileItemFactory对象,
        * 通过ServletFileUpload对象的构造方法或servletFileUpload.setFileItemFactory()方法设置
        * ServletFileUpload对象的FileItemFactory属性
        * */

代码实现

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        //判断上传的表单是普通表单还是文件表单
        if (!ServletFileUpload.isMultipartContent(req)){
   
            //不是文件表单
            return
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值