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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。