文件上传注意事项

一、文件上传必要前提

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
2   /WEB-INF/files/20140109 a.txt  UUID2.txt

不用数据库
UUID1_a.txt
UUID2_a.txt
5、限制上传文件的大小:
a、单个文件大小
ServletFileUpload.setFileSizeMax(2*1024*1024);
b、总文件大小
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.下载操作







转载于:https://my.oschina.net/mickeymouse/blog/518719

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值