java实现文件上传的三种方式,java文件上传和下载的实现

  java实现文件上传的三种方式,java文件上传和下载的实现

  本文分享JavaWeb上传文件的具体代码,供大家参考。具体如下。

  除了Web应用程序,基本思想:网站服务器内部还有一个文件系统。当客户端上传文件到网站时,它以流的形式将文件传输到服务器,如图所示:

  注意事项:

  1.为了保证服务器的安全性,上传的文件路径要放在外界不能直接访问的目录下,比如WEB-INF目录。2.因为服务器的文件系统大小是有限的,所以必须限制上传的文件大小。3.为了防止文件因文件名重复而被覆盖,应该为上传的文件夹生成一个唯一的标识,如时间戳、UUID或md5加密。4.可以限制上传文件的类型,接收文件时判断文件后缀是否合法。

  在JavaWeb中,一般我们使用ServletFileUpload类来处理上传的文件数据。它使用parseRequest方法将表单的每个输入项封装到一个FileItem对象中,并以列表的形式返回。数据处理简单方便。

  下面是一个上传文件的小演示。编辑器是IDEA,项目类型是Maven Webapp。

  包com . xiaojing . servlet;导入org . Apache.commons . file upload . file item;import org . Apache.commons . file upload . file upload exception;import org . Apache.commons . file upload . disk . disk fileitemfactory;导入org . Apache.commons . file upload . servlet . servlet file upload;导入javax . servlet . servlet exception;导入javax . servlet . http . http servlet;导入javax . servlet . http . http servlet request;导入javax . servlet . http . http servlet response;导入Java . io . *;导入Java . util . list;导入Java . util . uuid;类文件上传servlet扩展http servlet { @ override protected void doget(http servlet request req,http servlet response resp)抛出servlet exception,io exception {//确定表单是普通表单还是上传的文件表单如果(!servlet file upload . ismultipartcontent(req)){ return;}//创建上传文件的路径,一般在/WEB-INF下,比较安全。字符串上传路径=this.getServletContext()。get real path(/we b-INF/upload );File uploadFile=新文件(upload path);如果(!uploadfile . exists()){ uploadfile . mkdir();}//如果上传的文件大小超过限制,会放在临时文件夹中,过一会提醒用户删除或者永久保存。string Temppath=this . getservletcontext()。get real path(/we b-INF/temp );File tempFile=新文件(tempPath);如果(!tempfile . exists()){ tempfile . mkdir();} //1、创建diskfileitemcfactory对象diskfileitemcfactory=newdiskfileitemcfactory();//2.Get ServletFileUpload对象servlet file upload=new servlet file upload();upload.setFileItemFactory(工厂);//3.处理上传的文件。//将前端请求封装成一个Fileitem对象,每个表单条目都是一个Fileitem对象。try { listfileItem Items=upload . parse request(req);for (FileItem item:项

  ) {                if(item.isFormField()){ //如果是普通的表单                    //getFieldName()是input的name属性,getString()是input的value属性                    String fieldName = item.getFieldName();                    String value = item.getString("UTF-8");                    System.out.println(fieldName + ":" +value);                }else{  //上传文件的表单                    //---------------处理文件------------------//                    String uploadFileName = item.getName();                    System.out.println("上传的文件名:"+uploadFileName);                    if(uploadFileName == null uploadFileName.trim().equals("")){                        continue;                    }                    //获取fileName文件名,uploadFileName一般是url/文件路径/文件                    String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("\")+1);                    //获取文件后缀                    String fileExt = uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);                    System.out.println("文件信息:"+fileName);                    //---------------处理地址-----------------//                    //使用UUID唯一标识存放文件夹                    String uuidPath = UUID.randomUUID().toString();                    //获取真实的文件夹地址                    String realPath = uploadPath + "/" + uuidPath;                    File realFile = new File(realPath);                    if(!realFile.exists()){                        realFile.mkdir();                    }                    //---------------处理文件流-----------------//                    //获取文件上传的流                    InputStream inputStream = item.getInputStream();                    //创建一个文件输出流                    FileOutputStream outputStream = new FileOutputStream(realFile + "/" + fileName);                    //创建一个缓冲区                    byte[] buffer = new byte[1024 * 1024];                    int len = 0;                    while((len = inputStream.read(buffer)) > 0){ //每次读写1M                        outputStream.write(buffer,0,len);                    }                    outputStream.close();                    inputStream.close();                    String msg = "文件上传成功";                    System.out.println("文件上传成功");                    //清除临时文件                    item.delete();                    //转发                    req.setAttribute("msg",msg);                    req.getRequestDispatcher("index.jsp").forward(req,resp);                }            }        } catch (FileUploadException e) {            e.printStackTrace();        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。

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

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