天天看点

补充上传的一些细节上面的问题

文件最好是保存在WEB-INF下面!
这样主要是怕用户发送一个jsp页面,用户对这个页面进行访问(页面是用户自己写的)如果他里面加上一些关机啊,删除文件的代码就麻烦了
所以放在这个下面,客户就访问不到这个文件了
文件的名字配对的问题
有些浏览器上传的是客户的绝对路径,这样就需要对路径进行分割,代码比较简单
文件也许会发生乱码的情况
在servlet那边加上一个request.getCharacterEncoding("utf-8")就好了,fileUpLoad内部会自动的来调用它
进行文件打散的操作:将文件名转成hashcode的值,在转为16进制的数据,取第一位数为第一个文件夹,第二数个为第二个文件夹
主要的代码:
DiskFileItemFactory factory=new DiskFileItemFactory();//创建工厂
ServletFileUpload fileUpload=new ServletFileUpload(factory);//得到工厂的解析器
try {
List<FileItem> FileItems=fileUpload.parseRequest(request);//通过传入一个request对象得到fileupload的list对象
FileItem fileItem=FileItems.get(1);//先得到上传文件的fileIten对象
String realname=fileItem.getName();//得到文件的真实的名字

if(realname.contains("\\")){//处理绝对路径的问题
int index=realname.indexOf("\\");//返回当前的\的下标
realname=realname.substring(++index);//得到真实的文件的名字
}

String reserveName=UUID.randomUUID().toString();//得到一些随机的数
reserveName=realname.replace("-", "")+"_"+realname;//处理掉有减号的问题,并且加上真实的名字以下划线区分

int number=realname.hashCode();//得到文件名称的hashcode的值
String haString=Integer.toBinaryString(number);//将得到后的hashcode的值转化为十六进制数

String filePath=this.getServletContext().getRealPath("/WEB-INF/files");//得到当前项目下的真实的路径

filePath=filePath+"/"+haString.charAt(0)+"/"+haString.charAt(1);//进行字符串的拼接
File newFile=new File(filePath);//将路径保存到当前的文件对象中

newFile.mkdirs();//创建文件夹

File destinationFile=new File(newFile,reserveName);//将文件名和项目保存起来
try {
fileItem.write(destinationFile);//将文件写入项目路径
} catch (Exception e) {
throw new RuntimeException(e);
}



 // FileItem fileItem=FileItems.get(0);//得到第一个fileitem对象的
 // System.out.println("属性的名字为:"+fileItem.getName()+"     值为:"+fileItem.getString("UTF-8"));//得到第一个属性的名字和传入的值
 输出为: 属性的名字为:null     值为:爱你哦
 // FileItem fileItem2=FileItems.get(1);//得到第二个fileItem对象
 // System.out.println("文件的名称:"+fileItem2.getName()+"   文件的类型:"+fileItem2.getContentType());//获取文件的名称,以及获取文件的类型
 输出为: 文件的名称:爱你哦   文件的类型:image/jpeg
 // File file=new File("D://destiny.jpg");//创建该文件的对象
 // try {
 // fileItem2.write(file);//将文件保存到了d盘下名字为destiny的图片
 // } catch (Exception e) {
 // throw new RuntimeException(e);
 // }//输出到该文件对象中
} catch (FileUploadException e) {
throw new RuntimeException(e);
}//      

继续阅读