文件上传注意事项
2015-10-19 00:00
176 查看
一、文件上传必要前提
1、form表单:属性enctype必须取值为multipart/form-data2、提交请求方式:post
3、提供<input type="file" name="f1"/>的上传输入域
当form的enctype="multipart/form-data"时的正文内容:
-----------------------------7de771e40c46 分界符分成了三部分:每一部分都是用MIME协议进行描述的
Content-Disposition: form-data; name="name"
goudan
-----------------------------7de771e40c46
Content-Disposition: form-data; name="f1"; filename="a.txt"
Content-Type: text/plain
aaaaaaaaaaa
-----------------------------7de771e40c46
Content-Disposition: form-data; name="f2"; filename="b.txt"
Content-Type: text/plain
bbbbbbbbbbbbbbbbbbb
-----------------------------7de771e40c46--
二、文件上传简单案例
1.SmartUpload:早期Model1时代2.常用的框架
commons-fileupload实现文件上传 (Apache) :struts2内部封装的文件上传也是用commons-fileupload
3.如何使用commonse-fileupload
3.1导入jar包:
commons-fileupload-xxx.jar 、commons-io-xxxx.jar
3.2编码
三、文件上传要考虑的9个问题
1、如何保证服务器的安全
把保存文件的目录放在WEB-INF下2、中文编码问题:
a、普通字段中文值FileItem.getString("UTF-8");
b、中文的文件名
request.setCharacterEncoding("UTF-8");
3、防止一个文件夹下的文件太多的问题
分目录存储a、分日期创建:今天上传的文件放在以今天日期命名的文件夹中
b、用文件名的hashCode计算存放目录
4、防止同一个文件夹的文件重名
ID STORE_PATHOLD_FILENAME NEW_FILENAME USER_ID
1 /WEB-INF/files/20140109
a.txt
UUID1.txt
1
2 /WEB-INF/files/20140109
a.txt
UUID2.txt
2
不用数据库
UUID1_a.txt
UUID2_a.txt
5、限制上传文件的大小:
a、单个文件大小ServletFileUpload.setFileSizeMax(2*1024*1024);
b、
3ff0
总文件大小
ServletFileUpload.setSizeMax
6、临时文件的问题:
commons-fileupload,上传使用缓存,默认是10kb,超出10kb的上传文件,使用磁盘作为临时缓存(临时文件,存在哪里?默认是系统的临时目录)更改临时文件存放目录:DiskFileItemFactory.setRepository(File file)
FileItem.delete():删除临时文件。在关闭流之后调用。
7、限制上传文件的类型:
只允许上传图片:判断上传文件的扩展名
+
判断上传内容的MIME类型
8、多文件上传时,用户没传全
1 2 3 | if (item.getName().equals( "" )){ continue ; } |
9、文件上传进度条:
异步与服务器进行通信,间隔性的通信计算上传文件的进度比例
给ServletFileUpload注册一个监听器。
四、文件下载
1.将images文件夹下所有的文件 ,形成一个下载的文件列表(request域)--------------Servlet中2.JSP页面(JSTL,显示到JSP页面上,并提供一个下载的链接)
3.下载操作
来自为知笔记(Wiz)
相关文章推荐
- Jdbc事务
- Jdbc---增删改查 Test测试
- 正则表达式
- Servlet的API的访问:(三种方式)
- Action的书写:(三种格式)
- Struts2框架基本知识
- Struts中的值栈
- ajax-jQuery
- jQuery
- Cloudera Hadoop Developer数据分析师—上海
- 一个crash引发对版本管理备注重要性的思考
- android中layout_gravity 和 gravity的区别
- ArrayList和LinkedList区别
- 最大公约数与最小公倍数求解
- WIFI(串口-以太网-无线网)模块
- WIFI的无线数据传输终端
- 内嵌式串口转WiFi模块
- ios开发六大必备工具
- React环境搭建
- BarTender输入控件前准备