上传文件的一些实现细节: (1)上传文件的中文乱码:upload.setHeaderEncoding("utf-8"); (2)普通输入项的乱码问题: 手工方式:inputValue=new String(inputValue.getBytes("ISO8859-1"),"utf-8"); String inputValue=item.getString("utf-8"); (3)防止用户不在文件上传的输入项输入上传文件 if(!filename.trim().equals("")){ //读取上传文件的内容,并存入本地磁盘 } (4)临时文件的删除问题 factory.setRepository(new File(this.getServletContext().getRealPath("/temp"))); 。。。 is.close(); fos.close(); item.delete(); (5)上传文件的保存位置:服务的安全性 WEB-INF文件夹下的子文件夹中 或者不受服务器管理的目录 (6)多个用户上传了同名的文件,这时后面的人上传的文件就会覆盖原有的同名文件 唯一文件名,解决办法UUID.randomUUID().toString() filename=UUID.randomUUID().toString()+"_"+filename; (7)在同一个文件夹放置文件过多。 1257893 ===01001001111101101010101 & 00000000000000000001111 00000000000000000000101 5 在upload文件下键一个子文件夹5 00000100100111110110101 00000000000000000001111 00000000000000000000101===5 二级目录 upload 0 1 2 3 。。。。。。。15 0 1 2 3 。。15 16*16*1000 public String generateFilePath(String path,String filename){ //产生目录结构的算法:hash目录 int dir1=filename.hashCode() & 0x0f;//一级目录名 int dir2=filename.hashCode()>>4 & 0x0f; String savePath=path+"\\"+dir1+"\\"+dir2; File f=new File(savePath); if(!f.exists()){ f.mkdirs(); } return savePath; } (8)限制上传文件的大小 upload.setFileSizeMax(1024*1024); upload.setSizeMax(); (9)限制上传的文件的类型 能上传哪些类型的文件 String[] arr={".jpg",".bmp",".avi"}; List fileType=Arrays.asList(arr); List fileType=Arrays.asList(".jpg",".bmp",""); String ext=filename.substring(filename.lastIndexOf(".")); if(!fileType.contains(ext)){ request.setAttribute("message","文件类型只能是jpg、bmp和avi"); request.getRequestDispatcher("/message.jsp").forward(request,response); return; } (10)多个文件的问题 (11)显示上传进度 ProgressListener接口 update() |
|