文件上传与下载

Request对象提供了一个getInputStream方法,通过这个方法可以读取到客户端提交过来的数据。但由于用户可能会同时上传多个文件,在servlet端编程直接读取上传数据,并分别解析出相应的文件数据是一项非常麻烦的工作,示例。
为方便用户处理文件上传数据,Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件( Commons-fileupload ),该组件性能优异,并且其API使用极其简单,可以让开发人员轻松实现web文件上传功能,因此在web开发中实现文件上传功能,通常使用Commons-fileupload组件实现。
使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io。commons-io 不属于文件上传组件的开发jar文件,但Commons-fileupload 组件从1.1 版本开始,它工作时需要commons-io包的支持。

以下是上传文件中经常遇到的问题:

一、上传文件名的中文乱码和表单数据的中文乱码

1、普通字段输入的中文乱码:
 FileItem  getString("UTF-8")
2、上传文件的文件名乱码
 ServletFileUpload setHeaderEncoding("UTF-8")

二、如何保证服务器的安全

上传的文件放到用户访问不到的地方。WEB-INF

三、多次上传同名文件的覆盖
要对上传的文件进行改名:要改成保证名称唯一即可
3279483274327948_文件名.txt


四、如何防止同一目录下文件太多的问题

分目录存储:打散目录后存储


五、上传文件的大小控制(单个文件和总大小),及如何友好提示用户

单个文件大小控制:
ServletFileUpload setFileSizeMax(5*1024*1024);//单个文件最大只能是5M
l   
总文件大小控制:
ServletFileUpload setSizeMax(6*1024*1024);//总文件大小

给用户友好提示:通过抓异常的形式
FileUploadBase.FileSizeLimitExceededException:单个文件超出大小抛此异常
FileUploadBase.SizeLimitExceededException:总文件超出大小抛此异常

六、超出10k的文件的临时文件的处理
临时文件默认不会删除,需要手工清除
FileItem delete()
七、限制上传文件的类型

通过判断上传文件的后缀名即可。不是很严格

八、监听文件的上传进度
为ServletFileUpload注册一个监听。ProgressListener

九、用户没有选择文件上传时的问题

if(filename==null||filename.trim().equals("")){

 continue;

}

你可能感兴趣的:(web开发,servlet,jar,delete,存储,文件上传组件)