upload
来源:互联网 发布:淘宝网怎么是电脑版 编辑:程序博客网 时间:2024/05/16 01:36
一、文件的上传
1.文件上传的原理分析
1.1文件上传的必要前提
a、提供form表单 method必须是post
b、form表单的enctype 必须是 multipart/form-data
c、提供input type="file"类的上传输入域
1.2enctype 属性
作用:告知服务器请求正文MIME类型
application/x-www-form-urlencoded(默认):
正文:name=admin&password=123
服务器获取数据:String name = request.getParameter("name");
multipart/form-data:
正文:
服务器获取数据:request.getParameter(String) 方法获取指定表单字段内容,但是文件上传表单已经不是字符内容而是字节内容所以失效
2、借助第三方的上传组件实现文件上传
2.1 fileupload概述
fileupload 是由apache的commons组件提供的上传组件,它主要的工作是帮我们解析 request.getInputStream()
a、导入commons-fileupload相关jar包
*commons-fileupload.jar,核心包;
* commons-io.jar,依赖包。
2.2fileupload的核心类:
DiskFileItemFactory、 ServletFileUpload、FileItem
a、 解析原理
2.3 fileupload 简单应用
使用fileupload组件的步骤如下
1.创建fileupload组件步骤
1. 创建工厂类DiskFileItemFactory对象:
DiskFileItemFactory factory=new DiskFileItemFactory();
2.使用工厂创建解析器对象
ServletFileUpload fileUpload=new ServletFileUpload(factory)
3.使用解析器来解析request对象
List<FileItem> list=fileUpload.parseRequst(request)
FileItem 对象对应一个表单项.可以是文件字段或者是普通字段
boolean isFormField();判断当前表单字段是否为普通文本字段如果返回false,说明是文件字段;
String getFieldName():获取字段名称,例如:<input type=”text” name=”username”/>,返回的是username;
String getString():获取字段的内容,如果是文件字段,那么获取的是文件内容,当然上传的文件是文本文件
String getName():获取文件字段的文件名称;(a.txt)
String getContentType():获取上传的文件的MIME类型,例如:text/plain。
int getSize():获取上传文件的大小;
InputStream getInputStream():获取上传文件对应的输入流;
void write(File):把上传的文件保存到指定文件中。
delete();
3. 文件上传时候注意的几个问题
a、保证服务器的安全
把保存上传文件的目录放在用户直接访问不到的地方
b、避免文件被覆盖
让文件名唯一即可
c、避免同一个文件夹的文件过多
方案一:按照日期进行打散存储目录
方案二:用文件名的hashCode计算大散的存储目录
d 、限制文件的大小:web方式不适合上传大的文件
ServletFileUpload.setFileSizeMax(字节)
总文件大小:(多文件上传)
ServletFileUpload.setSizeMax(字节)
e、上传字段用户没有上传的问题
通过判断文件名是否为空即可
f、临时文件的问题
DiskFileItemFactory:
作用:产生FileItem对象
内部有一个缓存,缓存大小默认是10Kb。如果上传的文件超过10Kb,用磁盘作为缓存。
存放缓存文件的目录在哪里?默认是系统的临时目录。
如果自己用IO流实现的文件上传,要在流关闭后,清理临时文件。
FileItem.delete();
- upload?
- upload
- upload
- upload
- upload
- upload
- upload
- upload
- Upload
- upload
- Upload
- upload
- upload.aspx
- asp Upload
- servlet upload
- Ajax Upload
- 微软upload
- upload file
- 高德地图导航功能审核被拒
- iOS开发-模态视图跳转
- Kotlin学习(1)
- Quartz定时器快速入门学习(二)
- 三星手机调用系统相机 activity被销毁
- upload
- Scrollbar样式介绍
- MFC中popup、child、overlapped对话框的区别
- caffe之SoftmaxWithLoss层 自定义实现
- name can no longer contain capital letters
- Javascript获取IFrame内容(兼容IE&FF)
- META http-equiv="refresh" 实现网页自动跳转
- Python 列表内字符编码问题,encode和decode
- Android自定义滚动式时间选择器(在他人基础上修改)