Javaweb基础入门(十六)之文件的上传

1.文件上传的必要条件

1.form表单 属性 enctype=”multipart/form-data”
注意:当表单enctype属性 设置为”multipart/form-data”的时候 getParameter…方法将会失效
解释:服务器获取数据 getParameter(String name)方法 获取指定name 的字符内容 但文件上传 表单已经不再是 字符内容 而是字节内容
2.form表单 method提交方式必须是post
3.提供 input type=”file” 上传输入框

2.实现文件上传功能

fileupload 是由apache 的 commons组件提供的 主要工作就是帮我们解析 request.getInputStream()
实现步骤:
1.导入jar包 两个包 commons-fileupload-1.2.2 commons-io-2.2
2.fileUpload的核心类

类名解释
DiskFileItemFactory创建工厂对象
ServletFileUpload使用工厂 创建 解析器对象
FileItem使用解析器 来解析request对象 可以获取普通标签 和 上传标签

3.方法

方法作用
boolean isFormFiled()判断当前的表单标签是否是普通标签 如果返回 true 说明是普通标签 如果返回 false 说明是文件上传标签
String getFieldName()获取标签名
String getString()获取值
String getName()获取上传域中添加的文件路径(绝对路径)
void write(File)把上传的文件 保存到指定文件中

4.文件上传需要注意的几个问题:

A:限制文件大小 为了项目的安全性考虑 设置文件的大小限制

设置单个文件的大小 ServletFileUpload.setFileSizeMax()
设置文件上传的总大小ServletFileUpload.setSizeMax()

B.设置临时文件

如果上传的文件比较大 会产生一个临时文件 当文件上传成功 临时文件会被清理 DiskFileFactory.setRepository(设置临时文件存储位置)
注意:不要设置在系统盘 一般情况 系统盘都有保护
临时文件: 相当于是缓存 缓存的小是10kb 如果上传的文件超过10kb 就会出现临时文件 缓存数据

C.判断表单是否支持文件上传

判断表单是否设置了 enctype enctype必须是 multipart/form-data
ServletFileUpload isMultipartContent(request)

D.避免文件被覆盖 重名现象 文件名重组 加上 UUID
E.避免同一个文件夹中文件过多 打散目录

方案1 按照日期 进行打散存储 当前日期/fileName
方案2 按照文件名 获取哈希值 转成16进制 创建文件夹

F.解决中文乱码问题

1.上传框中中文乱码 ServletFileUpload setHeaderEncoding("编码集")
2.解决普通文本框中的乱码 FileItem getString("编码集")

G.判断上传字段 是否有值
H.截取文件名方式

截取文件名 第一种
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
截取文件名 第二种
fileName = FilenameUtils.getName(fileName);

I.文件存储路径映射
将文件存储在服务器硬盘上的绝对路径 无法通过浏览器访问?

在tomcat/conf/service.xml文件中<Host>标签
其中 docBase 表示硬盘上的地址 path=”/web09_upload” 表示访问地址

<Context docBase="web09_upload" path="/web09_upload" reloadable="true" source="org.eclipse.jst.jee.server:web09_upload"/>
<Context docBase="硬盘绝对路径" path="/访问地址" reloadable="true"/>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值