Java文件上传与文件下载实现方法详解

  

本文实例讲述了Java文件上传与文件下载实现方法。分享给大家供大家参考,具体如下:

  

  

数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。文件上传是数据上传的一种特例,指客户端向服务器上传文件。即将保存在客户端的文件上传一个副本到服务器,并保存在服务器中。

  

<强> 1,上传表单要求

  
      <李>文件上传要求客户端提交特殊的请求——多部分请求,即包含多部分数据的请求。必须将& lt;形式/祝辞标签的enctype属性值设为“<代码> multipart/格式>   <李>由于客户端上传文件的大小是不确定的,所以http协议规定,文件上传的数据要存放于请求正文中,不能出现在URL地址栏内。也就是说,想要上传文件必须提交帖子请求。   <李>表单中要有<代码> & lt;输入类型=拔募?祝辞>   <李>注意:<代码>多部分/格式>   
  

<强> 2,下载文件上传的jar包并查看官方文档

  

打开Apache官网,选择Apache项目列表中的共享

  

癑ava文件上传与文件下载实现方法详解"

  

选择下议院中的FileUpload项目,并下载jar包和源文件

  

癑ava文件上传与文件下载实现方法详解"

  

癑ava文件上传与文件下载实现方法详解"

  

查看FileUpload的工作方式

  

癑ava文件上传与文件下载实现方法详解"

  

查看FileUpload项目的API

  

癑ava文件上传与文件下载实现方法详解"

  

<强> 3,使用第三方jar包上传文件

        公开课RegisterServlet扩展HttpServlet {   私有静态最终长serialVersionUID l=1;   公共RegisterServlet () {   超级();   }   保护无效doGet (HttpServletRequest请求,HttpServletResponse响应)   抛出ServletException IOException {   response.getWriter ()。追加(“在:“).append (request.getContextPath ());   }   保护无效doPost (HttpServletRequest请求,HttpServletResponse响应)   抛出ServletException IOException {//第一步,判断请求是否为扇形请求   如果(! ServletFileUpload.isMultipartContent(请求)){   把新RuntimeException(“当前请求只支持文件上传”);   }   尝试{//第二步,创建FileItem工厂   DiskFileItemFactory工厂=new DiskFileItemFactory ();//设置临时文件存储目录   字符串路径=this.getServletContext () .getRealPath (“/Temp”);   文件临时=新文件(路径);   factory.setRepository(临时);//单位:字节。本例设置边界值为2 mb,超过该值会创建临时文件   factory.setSizeThreshold (1024 * 1024 * 2);//第三步,创建文件上传核心组件   ServletFileUpload上传=new ServletFileUpload(工厂);//设置物品的头部字符编码,解决中文乱码问题   upload.setHeaderEncoding (“utf - 8”);//设置单个上传文件的最大值为5 mb   upload.setFileSizeMax (1024 * 1024 * 5);//设置一次上传所有文件总和的最大值为10 mb(上传多个文件时起作用)   upload.setFileSizeMax (1024 * 1024 * 10);//第四步,解析请求获取所有的项目   List项=upload.parseRequest(请求);//第五步,遍历项目   (FileItem项目:项目){   如果(item.isFormField ()) {   processFormField(项);   其他}{   processUploadedFile(项);   }   }   }捕捉(FileUploadException e) {   e.printStackTrace ();   }   }   私人空间processFormField (FileItem项){   尝试{   字符串名称=item.getFieldName ();//解决中文乱码问题   字符串值=https://www.yisu.com/zixun/item.getString (“utf - 8”);   System.out.println(名字+ "=" +值);   }捕捉(UnsupportedEncodingException e) {   e.printStackTrace ();   }   }   私人空间processUploadedFile (FileItem项){   尝试{   InputStream InputStream=item.getInputStream ();   字符串字段名=item.getFieldName ();//获取上传文件原始名称   字符串文件名=item.getName ();//解决文件同名问题   文件名=System.currentTimeMillis() +文件名;   字符串contentType=item.getContentType ();   布尔isInMemory=item.isInMemory ();   长sizeInBytes=item.getSize ();   字符串路径=this.getServletContext () .getRealPath ("/UploadContent ");//日期现在=新的日期();   日历现在=Calendar.getInstance ();//对上传的文件进行分类管理   路径+=" + now.get (Calendar.YEAR) + " + (now.get (Calendar.MONTH) + 1) + " + now.get (Calendar.DAY_OF_MONTH);//若目录不存在,则创建该目录   文件目录=新文件(路径);   如果(! directory.exists ()) {   directory.mkdirs ();   }   文件descFile=新文件(路径,文件名);   OutputStream OutputStream=new FileOutputStream (descFile);   int长度=1;   byte[]新字节缓冲区=[1024];   在((长度=read(缓冲))!=1){   outputStream。写(缓冲区,0,长度);   }   outputStream.close ();   inputStream.close ();//删除临时文件   item.delete ();   }捕捉(IOException e) {   e.printStackTrace ();   }   }   }      

Java文件上传与文件下载实现方法详解