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.29\webapp\Demo0809\upload

二,下载文件

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);
	}

}


下载结果

posted @ 2018-08-09 19:45  菜鸡变小鸟  阅读(265)  评论(0编辑  收藏  举报