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


    文件最好是保存在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);
    }//



  • 相关阅读:
    iOS开发快捷键
    通达信指标函数说明大全(2014)(转)
    windows下的wxWidgets环境配置
    Qt->数字格式化
    被称"硬盘杀手"的几个win7系统服务如何关闭(转)
    关闭系统索引(转)
    SSD固态硬盘优化(转)
    通达信的文件目录结构(转)
    Macdrive8破解版如何激活
    IOS6.0调用通讯录和之前的差别
  • 原文地址:https://www.cnblogs.com/csnd/p/16675727.html
Copyright © 2020-2023  润新知