本文实例讲述了Java文件上传与文件下载实现方法。分享给大家供大家参考,具体如下:
数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。文件上传是数据上传的一种特例,指客户端向服务器上传文件。即将保存在客户端的文件上传一个副本到服务器,并保存在服务器中。
<强> 1,上传表单要求强>
-
<李>文件上传要求客户端提交特殊的请求——多部分请求,即包含多部分数据的请求。必须将& lt;形式/祝辞标签的enctype属性值设为“<代码> multipart/格式> 代码”,enctype表示,及编码类型李>
<李>由于客户端上传文件的大小是不确定的,所以http协议规定,文件上传的数据要存放于请求正文中,不能出现在URL地址栏内。也就是说,想要上传文件必须提交帖子请求。李>
<李>表单中要有<代码> & lt;输入类型=拔募?祝辞> 代码标签李>
<李>注意:<代码>多部分/格式> 代码请求与普通请求不同李>
<强> 2,下载文件上传的jar包并查看官方文档强>
打开Apache官网,选择Apache项目列表中的共享
选择下议院中的FileUpload项目,并下载jar包和源文件
查看FileUpload的工作方式
查看FileUpload项目的API
<强> 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文件上传与文件下载实现方法详解