javaweb文件的上传和下载,java文件上传的几种方式_1

  javaweb文件的上传和下载,java文件上传的几种方式

  本文实例为大家分享了整合开实现上传文件的具体代码,供大家参考,具体内容如下

  这是需要使用到的两个冲突包一定要导入到解放运动目录中,并添加到发布的解放运动目录下

  index.jsp

  %@页content type= text/html;charset=UTF-8 language= Java % html head Title $ Title $/Title/head body a href= upload。JSP rel=外部无跟随点击上传文件/a /body/html

  upload.jsp

  %@页content type= text/html;charset=UTF-8 language= Java % html标题上传文件页面/title/head body form action= $ { pagecontext。请求。上下文路径}/上传。do enctype= multipart/form-data method= post p请输入用户:输入类型=text name=username/p p上传文件:输入类型=文件名称=文件/p输入类型=提交/p/form/body/html

  UpLoadServlet

  包com。pzy。servlet导入org。阿帕奇。公地。文件上传。文件项目;导入组织。阿帕奇。公地。文件上传。文件上传异常;导入org。阿帕奇。公地。文件上传。进度侦听器;导入组织。阿帕奇。公地。文件上传。磁盘。磁盘fileitemfactory导入org。阿帕奇。公地。文件上传。servlet。servlet文件上传;导入javax。servlet。http。http servlet请求;导入Java。io。*;导入Java。util。列表;导入Java。util。uuid公共类UpLoadServlet扩展javax。servlet。http。http servlet { protected void doPost(javax。servlet。http。http servlet请求。servlet。http。http servlet响应)抛出javax.servlet.ServletException,IOException { doGet(request,response);}受保护的void doGet(javax。servlet。http。http servlet请求请求,javax。servlet。http。http servlet响应响应)抛出javax.servlet.ServletException,IOException { try { //先判断提交的是普通请求还是带有文件的请求如果(!servlet文件上传。ismultipartcontent(request)){ return;//如果是普通文件,直接返回}//如果通过了这个如果,那说明表单是带有文件的//创建上传文件的保存路径,建议在WEB-INF下,因为这个文件夹是安全的,用户是无法访问这个文件夹的字符串上传路径=this。getservletcontext().getRealPath(/WEB-INF/

  upload");        File uploadFile = new File(uploadPath);        //判断这个文件夹是否存在        if(!uploadFile.exists()){            uploadFile.mkdir();        }        //创建一个临时路径, 假如文件超过了预期的大小,我们就把他放在一个临时文件下,过几天自动删除,或者提醒用户转存为永久        String tmpPath = this.getServletContext().getRealPath("/WEB-INF/tmp");        File file = new File(tmpPath);        //判断文件夹是否存在        if(!file.exists()){            file.mkdir();//没有的话就创建一个这样的目录        }        /*处理上传的文件,一般都需要通过流来获取,我们可以使用request.getInputStream(),原生态的文件上传流获取,十分麻烦        *我们建议使用Apache的文件上传组件来实现,commons-fileupload,它需要依赖于common-io        */        //1.创建DiskFileItemFactory对象,处理文件上传路径和大小限制的;        DiskFileItemFactory factory=getDiskFileItemFactory(file);        //2.获取ServletFileUpLoad        ServletFileUpload upload=getServletFileUpLoad(factory);        //3.处理上传的文件        String msg=uploadParseRequest(upload,request,uploadPath);        //servlet请求转发消息        request.setAttribute("msg",msg);        request.getRequestDispatcher("msg.jsp").forward(request,response);        } catch (FileUploadException e) {            e.printStackTrace();        }    }    public static  DiskFileItemFactory getDiskFileItemFactory(File file) {        DiskFileItemFactory factory = new DiskFileItemFactory();        //通过这个工厂设置一个缓冲区,当上传的文件大于这个缓冲区的时候,将他放入临时文件中        factory.setSizeThreshold(1024*1024);//此时设置缓冲区大小为1M        factory.setRepository(file);//临时目录的保存目录,需要一个file        return factory;    }    public static ServletFileUpload getServletFileUpLoad(DiskFileItemFactory factory) {        ServletFileUpload upload = new ServletFileUpload(factory);        //监听文件上传进度        upload.setProgressListener(new ProgressListener() {            @Override            //pBytesRead是已经读取的文件大小            //pContentLength是文件的大小            public void update(long pBytesRead, long pContentLength, int pItems) {                System.out.println("总大小:"+pContentLength+"目前上传大小:"+pBytesRead);            }        });        //处理乱码问题        upload.setHeaderEncoding("UTF-8");        //设置单个文件的最大值        upload.setFileSizeMax(1024*1024*10);//最大值为10m        //设置总共文件能够上传的文件大小        upload.setSizeMax(1024*1024*10);        return upload;    }    public static String uploadParseRequest(ServletFileUpload upload, HttpServletRequest request, String uploadPath) throws FileUploadException, IOException {       String msg="";        //把前端请求进行解析,封装成一个FileItem对象        List<FileItem> fileItems = upload.parseRequest(request);        for(FileItem fileItem:fileItems){            if(fileItem.isFormField()){//判断上传的文件是普通的表单还是带文件的表单                //getFieldName指的是前端表单控件的name;                String name = fileItem.getFieldName();                String value = fileItem.getString("UTF-8");//处理乱码                System.out.println(name+":"+value);            }else{//判断它是上传的文件                //============================================处理文件=================================                //拿到文件的名字                String uploadFileName = fileItem.getName();                System.out.println("上传的文件名是:"+uploadFileName);                if(uploadFileName.trim().equals("")uploadFileName==null){                    continue;                }                //获得上传的文件名    (一般进来的文件都会包含目录.例如/image/girl/pop.png)                String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("/") + 1);                //获得后缀                String fileExtName=uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);                /*                如果文件后缀名fileExtName不是我们需要的就直接return,不处理,告诉用户文件类型不对                 */                System.out.println("文件信息名:"+fileName+"----文件类型"+fileExtName);                //可以使用UUID(唯一识别的通用码),保证文件名的唯一;                //UUID.randomUUID(),随机生成一个唯一识别的通用码;                String uuidPath = UUID.randomUUID().toString();                //==========================文件处理完毕=====================================                //存到哪?      uploadPath                //文件的真实存在路径     realPath                String realPath=uploadPath+"/"+uuidPath;                //给每个文件创建一个对应的文件夹                File realPathFile = new File(realPath);                if(!realPathFile.exists()){                    realPathFile.mkdir();                }                //=================================存放地址完毕========================================                //获得文件上传的流                InputStream inputStream = fileItem.getInputStream();                //创建一个文件输出流                //realPath=真实的文件夹                //这只是到最后一级的目录,还差一个文件;加上输出文件的名字+"/"uuidFileName;                FileOutputStream fos = new FileOutputStream(realPath + "/" + fileName);                //创建一个缓冲区                byte[] buffer=new byte[1024*1024];                //判断是否读取完毕                int len=0;                while((len=inputStream.read(buffer))>0){                    fos.write(buffer,0,len);                }                //关闭流                fos.close();                inputStream.close();                msg="文件上传成功!";                fileItem.delete();//上传完成,删除临时文件                //===========================文件传输完成==================            }        }        return msg;    }}msg.jsp

  

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>消息提示</title></head><body>${msg}</body></html>

WEB-XML

 

  

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0">    <servlet>        <servlet-name>UpLoadServlet</servlet-name>        <servlet-class>com.pzy.servlet.UpLoadServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>UpLoadServlet</servlet-name>        <url-pattern>/upload.do</url-pattern>    </servlet-mapping></web-app>

上传成功后,可以看到upload文件夹下存在一个有uuid码组成的文件夹,文件夹下是我们上传的文件

 

  

 

  总结:

  1、为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。2、为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名,我们采用为每一个文件创建一个独一无二的UUID文件夹来保存文件,即使上传了两个相同的文件,也要被保存在不同UUID文件名的目录中3、要限制上传文件的最大值,大于最大值会被存放为临时文件4、由于JVM运行的是class文件,我们的java文件被编译为class文件是存放在web目录中的,因此,最后的上传地址也是在web目录下

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: