zoukankan      html  css  js  c++  java
  • javaweb----文件上传下载

    一,上传文件

    fileload.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
       <form action="${pageContext.request.contextPath }/FileUplaodSerlvet" method="post" enctype="multipart/form-data">
       用户名:<input type="text" name="uername" ><br>
       密码:<input type="password" name="password" ><br>
        <input type="file" name="file1" >上传文件<br>
       <input type="file" name="file2" >上传文件<br>
       <button>提交</button>
       </form>
    </body>
    </html>
    

    FileIploadServlet

    package com.fileupload;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Collection;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.MultipartConfig;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.Part;
    
    @WebServlet("/FileUplaodSerlvet")
    
    //记得配置注解
    @MultipartConfig
    public class FileUplaodSerlvet extends HttpServlet {
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.getWriter().append("Served at: ").append(request.getContextPath());
    	}
    
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//避免中文乱码
    		request.setCharacterEncoding("UTF-8");
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=utf-8");
    		
    		//获取存储路径
    		String savepath=request.getServletContext().getRealPath("/upload");
    		//因为我们的服务器上不确定是否有upload,所以
    		File file=new File(savepath);
    		if(!file.exists()) {
    			file.mkdirs();
    		}
    		//获取上传文件集合
    		Collection<Part> parts=request.getParts();
    		if(file!=null) {
    			for(Part part:parts) {
    				//以为这里part获取的包括username,password,但是他们的类型为空,所以需要排除它们
    				if(part.getContentType()!=null) {
    					//Servlet3.0将multipart/form-data的post的请求封装成Part,通过Part对文件上传操作。
    					//Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
    					//获取请求头,请求头的格式:form-data;name="file";filenme="*******.zip"
    					
    					String header =part.getHeader("content-disposition");
    					//从请求头里获取文件名
    					String filename=getFileName(header);
    					//把文件写到指定路径
    					//File.separator系统兼容写法/或\
    					part.write(savepath+File.separator+filename);
    					
    				}
    			}
    			PrintWriter out =response.getWriter();
    			out.println("上传成功");
    			out.flush();
    			out.close();
    		}
    	}
    	private String getFileName(String header) {
    		/**
    		 * String[] tempArr1 = header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别
    		 * 火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}
    		 * IE浏览器下:tempArr1={form-data,name="file",filename="E:snmp4j--api.zip"}
    		 */
    		String[] tempArr1=header.split(";");
    		/**
    		 * 火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}
    		 * IE浏览器下:tempArr2={filename,"E:snmp4j--api.zip"}
    		 */
    		String[] tempArr2=tempArr1[2].split("=");
    		// 获取文件名,兼容各种浏览器的写法
    		String filename=tempArr2[1].substring(tempArr2[1].lastIndexOf("\")+1).replaceAll(""","");
    		return filename;
    	}
    }
    
    
    

    查看服务器项目下的上情况E:apache-tomcat-8.0.29webappDemo0809upload

    二,下载文件

    download.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
      <a href="${pageContext.request.contextPath }/download">下载</a>
    </body>
    </html>
    

    DownloadServlet.java

    package com.listener;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/download")
    public class Download extends HttpServlet {
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		//设置服务器的响应为下载模式
    		response.setContentType("application/x-msdownload");
    		//设置文件下载后的名字
    		String filename="1.jpg";
    		//设置请求头的格式
    		response.setHeader("content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));
    		
    		//设置从服务器下载的路径
    		String url=request.getServletContext().getRealPath("/upload/")+"1.jpg";
    		//设置输出流
    		OutputStream out=response.getOutputStream();
    		//设置输入从服务器上获取资源
    		InputStream in=new FileInputStream(url);
    		//设置缓冲区
    		byte[] buffer=new byte[1024];
    		
    		int len=in.read(buffer);
    		
    		while(len!=-1) {
    			out.write(buffer,0,len);
    			len=in.read(buffer);
    		}
    		out.close();
    		in.close();
    		
    		
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }
    
    
    

    下载结果

  • 相关阅读:
    flash播放器插件与flash播放器的区别
    FLASH动作脚本详解
    flash代码
    LitJson使用中需要注意的一些问题(转)
    AS3中ASCII码和字符互转函数
    JQuery直接调用asp.net后台WebMethod方法(转)
    C#文件操作
    js延迟执行
    js操作表格、table、
    定时任务、js定时任务
  • 原文地址:https://www.cnblogs.com/liu-ya/p/9448581.html
Copyright © 2011-2022 走看看