文档详情

文件上传下载考虑的问题.doc

发布:2017-02-24约6.15千字共6页下载文档
文本预览下载声明
1.上传文件名的中文乱码和上传数据的中文乱码 upload.setHeaderEncoding(UTF-8);//可以解决上传文件名的中文乱码 //表单为文件上传,设置request的编码无效,不能解决中文乱码,只能手工转化 a. value=new String(value.getBytes(iso8859-1),utf-8); b. String value=item.getString(UTF-8); //上传组件commons-fileupload 作者提供了该方法 2.为了保证服务器安全,上传文件应该放到外界无法访问的目录;通常放在WEB-INF下的目录 3.为了保证每个用户上传文件的不覆盖;要写一个算法,产生唯一的文件名 public String makeFileName(String fileName){ return UUID.randomUUID().toString()+_+fileName; } 4.为防止一个目录下面出现太多文件,使用hash算法打算存储 //savePath为 要保存的根目录; //在根目录下产生多级目录;打散文件保存 //这样打散有个好处;可以根据文件名找到文件的真实目录 public String makePath(String fileName,String savePath){ int hashcode=fileName.hashCode(); int dir1=hashcode0xf;//拿到hashcode的1-4位 ;那么1级目录最大能产生16个目录 int dir2=(hashcode0xf0)4;//拿到hashcode的5-8位;那么2级目录最大能产生16个目录 String dir=savePath+\\+dir1+\\+dir2; File file=new File(dir); if(!file.exists()) { file.mkdirs();//要调用mkdirs;多级目录 } return dir; } 5.要限制上传文件的最大值,可以通过(ServletFileUpload类)upload.setFileSizeMax(1024); 并通过捕获FileUploadBase.FileSizeLimitExceededException异常给用户友好提示 多个文件(总量)最大值:upload.setSizeMax(1024*10);//10KB 异常为:FileUploadBase.SizeException 6.上传文件超过设定的缓存区大小,则要设置上传文件的临时目录, DiskFileItemFactory factory=new DiskFileItemFactory(); factory.setRepository(new File(this.getServletContext().getRealPath(/WEB-INF/temp))); 而临时目录的中的文件最后要做删除; 想确保临时文件被删除,一定要在处理完上传文件后,调用item.delete()方法; 7.限制上传文件的类型;在收到上传的文件名时,判断后缀名是否合法; 8.监听文件上传的进度; ServletFileUpload upload=new ServletFileUpload(factory); upload.setProgressListener(new ProgressListener(){ public void update(long pBytesRead,long pContentLength,int pItems){ System.out.println(文件大小为:+pContentLength+,当前已处理:+pItems); } }); //监听器一定要在下面这行代码的前面,是下面代码要调用监听器 ListFileItem list=upload.parseRequest(request); 9.在web页面中动态添加文件上传输入项 function addinput(){ var div = document.getElementById(file); var input = document.createElement(input); input.type=file; =filename; var del = document.createElement(input); del.type=button; del.value=删除;
显示全部
相似文档