您的位置:首页 > 其它

文件上传注意事项

2015-10-19 00:00 176 查看

一、文件上传必要前提

1、form表单:属性enctype必须取值为multipart/form-data

2、提交请求方式: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_PATH
OLD_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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: