JAVA中文件上传的实例

来源:互联网 发布:马克斯cms x站 编辑:程序博客网 时间:2024/06/10 04:17
  1. 导包
     向项目中的WEB-INF下的lib目录中导入下面两个包:commons-fileupload.jar包和commons-io.jar包
  2. 编写上传servlet代码。
public class UploadServlet extends HttpServlet {    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {    //获取部署在tomcat下的路径目录。    File file = new File (this.getServletContext().getRealPath("/tempfile"));    //如果该目录不存在,我们应该自己创建该目录。    if(!file.exists())        file.mkdirs();    //创建文件项工厂对象,设置缓冲区大小和临时文件位置。    DiskFileItemFactory factory = new DiskFileItemFactory(1024*1024,file);    //创建指定缓冲区和临时文件位置的ServletFileUpload对象    ServletFileUpload upload = new ServletFileUpload(factory);    //判断请求是否为文件上传模式。    if(ServletFileUpload.isMultipartContent(request)){        //使用自己指定的编码编码信息。Tomcat默认的编码是为"ISO-8859-1",防止出现上传文件名称乱码的问题。        upload.setHeaderEncoding("UTF-8");        //这里可以设文件上传大小上限。也可以不设置。参数单位为Byte        //upload.setSizeMax(1024*1024*5);        //解析request,得到所有上传项目的数据。该方法有异常,可以选择进行处理或者声明异常。        List<FileItem> items = upload.parseRequest(request);        //遍历List集合,对上传项目进行判断,根据情况进行处理。        for(FileItem item:items){            //判断是否是上传项目是否在表单直接提交数据的范围            if(item.isFormField()){                //表单直接携带的数据,既:非文件上传的组件。                String fieldname = item.getFieldName();//获取组件名称                String content = item.getString("UTF-8");//获取组件的内容,传入UTF-8,是为了保证和上面设置的编码一样,防止出现乱码问题。                //根据自己的实际情况需求做操作。            }else{                //组件为文件上传,为了防止代码太乱,将一些功能封装到自定义工具类中,工具类等下介绍。                //获取上传文件的名字                String name = item.getName();                String filename = FileUploadUtils.getRealName(name);                //给文件起个随机名字。                String uuidname = FileUploadUtils.getUUIDFileName(filename);                //获取散列目录                String hashDirectory=FileUploadUtils.getHashDirectory(filename);                //存放散列目录的父目录,在该案例中,设父目录名称为upload                String parentPath =this.getServletContext().getRealPath("/upload");                File hd = new File(parentPath,hashDirectory);                //判断目录是否存在,不存在则创建。                if(!hd.exists)                    hd.mkdirs();                //调用commons-io包中的工具                IOUtils.copy(item.getInputStream(),new FileOutputStream(new File(hd,uuidname)));                //删除临时文件。                item.delete();            }        }    }else{        //执行非文件上传请求操作        response.getWrite().write("这不是上传请求");        return;    }}
  1. 自定义上传工具类。
public class FileUploadUtils {    //获取文件的名称。    public static String getRealName(String filename){        int index = filename.lastIndexOf("\\")+1;        return filename.substring(index);    }    //获取随机名称    public static String getUUIDFileName(String filename){        int index = filename.indexOf(".");        if(index!=-1)            return UUID.randomUUID()+filename.substring(index);        else            return UUID.randomUUID().toString();    }    //通过散列目录算法,得到散列目录。    public static String getHashDirectory(String filename){        int hashcode = filename.hashCode();        int a = hashcode & 0xf;        hashcode = hashcode>>>4;        int b = hashcode & 0xf;        return "/"+a+"/"+b;    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 开光貔貅牙磕了怎么办 玉貔貅鼻子碎了怎么办 开光的貔貅摔坏了怎么办 貔貅摔坏了耳朵怎么办? 貔貅摔坏了一点点怎么办 天猫删评价扣4分怎么办 暴风影音下载电视剧下载不了怎么办 fm2017引援电脑买了怎么办 退休时医保不够二十年怎么办 和的面迟迟不发怎么办 做面条的面发了怎么办 发不起来的面团怎么办 如果婚后买房离婚后财产怎么办 空腹体检前喝水了怎么办 莆田市风俗婴儿死了怎么办后事 上司给你换不好岗位怎么办 领导要把我调走怎么办 美国上庭遇法官退休案子怎么办 夫妻一套房离婚户囗怎么办 正营生不了副团怎么办 浅色衣服被染色了怎么办 解大便解不出来怎么办 强拆挖掘机被村民扣押怎么办 小孩哭的时候接不上气怎么办 昆明市长信箱发不出去怎么办 中国公民在香港想去澳门怎么办 面包车不给贴膜怎么办 在香港海关被扣怎么办 发现被医院骗了怎么办 白皮子科染上血怎么办 宝宝头发里长湿疹怎么办 婴儿头发里长湿疹怎么办 宝宝解小便地方有湿疹怎么办 婴儿湿疹怎么办长在脸上 广州奥龙堡游泳卡过期了怎么办 大学生在学校当兵户口怎么办 茶叶梗枕头太硬怎么办 茶梗枕头太硬怎么办 照片放久了变红怎么办 乳腺萎缩和韧带松弛怎么办 航海王启航服务器爆满怎么办