页面的form表单上传文件

页面的上传文件,到后台需对form表单进行设置

需要设置三个属性

  1. 上传框要有name属性
  2. 表单的method必须是post
  3. 表单的enctype属性必须是 multipart/form-data
表单中的entype属性有默认值,enctype="application/x-www-form-urlencoded",不写的情况下默认。---这个值是url表单
使用上传必须将这个值修改为 enctype="multipart/form-data"---这个值是多部分表单

url(普通)表单
以url形式进行数据拼装传递的表单
多部分表单
------------------------------------xxxxx
一部分
 -----------------------------------xxxxx
一部分
------------------------------------xxxxx
一部分

不论是url(普通)表单还是多部分表单,数据都在请求体
注意:如果是多部分的表单进行提交,之前使用的request获取数据的3种方式,全部失效

接收方式:
原理:使用request.getInputStream(); //对流中数据拆分,工作中不会使用,因为太复杂
使用上传工具包:
1、导入jar包
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
2、在servlet中使用方法
//创建一个磁盘文件工厂--需要通过它产生核心上传对象
DiskFileItemFactory disk = new DiskFileItemFactory();---导入的包下
//生成核心的上传对象---需要它解析request---传入上传对象
ServletFileUpload sfu = new ServletFileUpload(disk);
//解析request
List<FileItem> list = sfu.parseRequest(request);
//遍历所有的表单项
for (FileItem item : list){
//判断是普通的表单项还是上传的表单项 item.isFormField(): true:普通的表单项 false:上传的表单项
if(item.isFormField()){
//普通的表单项  name value
String name=item.getFieldName();//获取表单属性名
String value=item.getString("utf-8");//获取表单属性值

}else{
// 上传表单项  文件名  内容
String filename = item.getName();//获取上传文件的文件名
InputStream is = item.getInputStream(); //文件内容
// 放在服务器上
String path = this.getServletContext().getRealPath("");//获取项目在磁盘的位置
FileOutputStream os = new FileOutputStream(path+"/upload/"+filename);//获取文件输出流
IOUtils.copy(is, os);//使用commons-io-1.4.jar中的copy方法,将上传文件的流转换为输出流,并将文件保存在本地

注:因为该文件是保存在下的,每次项目从新部署都会将文件销毁,解决办法:项目备份,或者保存在项目外的磁盘位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值