zoukankan      html  css  js  c++  java
  • Servlet之文件的上传与下载

    文件上传和文件下载是我们学JAVA Web时必不可少的模块。今天我们探讨下这个问题

    文件上传:

    request.setCharacterEncoding("utf-8");//设置请求乱码

    response.setContentType("text/html;charset=utf-8");//设置响应乱码,先把两个乱码问题解决。防止乱码

    DiskFileItemFactory fatory=new DiskFileItemFactory();//建立一个DiskFileItemFactory
    ServletFileUpload fileupload = new ServletFileUpload(fatory);//使用ServletFileUpload调用这个工厂
    // fileupload.setFileSizeMax(1024*60);//设置文件单个大小不超过60k
    fileupload.setSizeMax(1024*300);//设置文件总大小不超过300k
    ServletContext servletContext = request.getServletContext();
    String realPath = servletContext.getRealPath("/upfile");////获取指定文件夹的路径(新建一个服务器上的upfile的文件夹)
    File file=new File(realPath);//在这个路径下声明file
    if(file.exists()){
    file.mkdirs();
    }//文件存在则遍历
    try {
    List<FileItem> filelist = fileupload.parseRequest(request);
    for(FileItem item:filelist){
    if(item.isFormField()){
    String name=item.getFieldName();
    }else{
    //不上传空文件
    long size = item.getSize();
    if(size ==0){//文件为空,跳过此次判断,不进行上传
    continue;
    }
    //使用UUID唯一标识文件名字,使图片不被覆盖。
    String name = item.getName();
    String prefix = UUID.randomUUID().toString();
    prefix = prefix.replace("-","");
    String fileName = prefix+"_"+name;
    try {
    item.write(new File(realPath+"\"+fileName));
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    } catch(FileSizeLimitExceededException e){
    System.out.println("单个文件超过60kb");
    }catch(SizeLimitExceededException e){
    System.out.println("总文件超过300kb");
    }catch (FileUploadException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    文件下载:

    ServletContext servletContext = request.getServletContext();
    String fileName="童话镇.mp3";
    String path = servletContext.getRealPath("/WEB-INF/"+fileName);//得到文件的路径
    File file=new File(path);
    InputStream in=new FileInputStream(file);//将文件放在输入流中
    //fileName=new String(fileName.getBytes("gbk"),"iso8859-1");
    fileName = java.net.URLEncoder.encode(fileName,"utf-8");//防止中文乱码,下载后不能播放和观看
    response.setHeader("Content-Disposition", "attachment;filename="+fileName);
    ServletOutputStream out = response.getOutputStream();
    IOUtils.copy(in, out);//调用IOUtils方法将输入流转为输出流
    in.close();//关闭输入流

  • 相关阅读:
    eclipse快捷键
    NetBeans无法使用svn相关功能
    sqlplus执行startup出现ORA-00119,ORA-00132错误
    Oracle中对number类型数据to_char()出现各位少0,或者值为###的处理
    服务器启动报mybatis配置错误
    Java Thread interrupt
    nginx backend 健康检查
    SSH 安全建议
    ARP
    Postgresql 锁查看
  • 原文地址:https://www.cnblogs.com/xuningchuanblogs/p/7441431.html
Copyright © 2011-2022 走看看