文件上传杂记

本文介绍了使用Apache的Commons FileUpload组件进行文件上传的步骤,包括将jar文件添加到项目,理解ServletFileUpload类的作用,以及设置文件上传的安全性和限制。同时强调了HTML表单的正确配置和处理上传时的核心代码。
摘要由CSDN通过智能技术生成

文件上传

文件上传到服务器的流程图

1、准备工作

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

采用Apache的开源工具common-fileupload这个文件上传组件。

common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。

1.把两个包相应的jar文件拷贝到项目的lib文件夹(自己新建)下

【使用IDEA需要注意修复路径,将lib添加到项目输出目录】

2、使用类介绍

commons-FileUpload 组件的API

ServletFileUpload类 用于实现文件的上传操作

【文件上传注意事项】

1、为保证服务器的安全,上传的文件应放在外界无法直接访问的目录下,例如放于WEN-INF目录下。

2、为防止同名文件产生覆盖现象,要为文件指定一个唯一的文件名。(-时间戳 -uuid -md5 -位运算算法 )

3、要对上传文件的大小进行限制(限制上传文件的最大值)。

4、限制上传文件的类型,在收到上传文件名时,判断文件名(后缀名)是否合法。

【注意事项】

在HTML页面input必须有name<input type="file" name="file">

<body>
    <form action="FileUploadServlet" method="post" enctype="multipart/form-data">
        <input type="text" name="username"><br>
        <input type="file" name="file"><br>
        <input type="submit" value="文件上传">
    </form>
</body>

这里文件上传表单中的method和enctype的设置属性是固定的,只能为post和multipart/form-data

【需要用到的类详解】

ServletFileUpload负责处理上传的文件数据,并将表单中的每个输入项封装成一个FileItem对象,在使ServletFileUpload对象解析请求时需要DiskFileItemFactory对象

所以,我们需要在进行解析工作前构造好DiskFileItemFactory对象,通过ServletFileItem对象的构造方法或setFileItemFactory()设置ServletFileUpload对象的fileItemFactory属性。

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

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

【核心代码】
package cn.lw.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值