文件的下载

文件的下载

package cn.class3g.web.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ListFileServlet extends HttpServlet {


	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String filePath = this.getServletContext().getRealPath("/WEB-INF/upload");
		
		Map fileMap = new HashMap();
		
		traverse(new File(filePath), fileMap);
		
		request.setAttribute("fileMap", fileMap);
		request.getRequestDispatcher("/listfiles.jsp").forward(request, response);		
	}


	private void traverse(File file, Map fileMap) {
		if(file.isFile()){ //如file为文件,添加到fileMap中去
			String uuidName = file.getName();
			String realName = uuidName.substring(uuidName.lastIndexOf("_")+1);
			
			fileMap.put(uuidName, realName );
			
		}else{ //如file为目录,则递归调用
			File[] subFiles = file.listFiles();
			for(File f : subFiles){
				traverse(f,fileMap);
			}
		}
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);

	}

/

package cn.class3g.web.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String uuidName = request.getParameter("uuidName");
		String realName = request.getParameter("realName");
		
		//因为参数是通过url传过来的,所以需要手动进行编码转换
		uuidName = new String(uuidName.getBytes("iso8859-1"),"utf-8");
		realName = new String(realName.getBytes("iso8859-1"),"utf-8");
		
		//又因为realName需要放到response的头contetn-dispposition中去,发送到客户的浏览器端,
		//所以需要对它调用URLEncoder的encode方法进行url编码,才可以保证客户取到正确的中文文件名。
		realName = URLEncoder.encode(realName, "utf-8");
		
		
		System.out.println("uuidName="+uuidName);
		
		
		File file = new File(getFileAddr(uuidName));
		if(!file.exists()){
			request.setAttribute("message", "您要下载的文件不存在!");
			request.getRequestDispatcher("/message.jsp").forward(request, response);
		}else{
			response.setHeader("content-disposition", "attachment;filename="+realName);
			
			FileInputStream fis = new FileInputStream(file);
			OutputStream out = response.getOutputStream();
			
			byte[] buffer = new byte[1024];
			int len = 0;
			while((len=fis.read(buffer))>0){
				out.write(buffer, 0, len);
			}
			
			fis.close();
			
		}		
	}
	
	private String getFileAddr(String uuidName){
		int dir1 = uuidName.hashCode() & 0xf;
		int dir2 = (uuidName.hashCode()>>4) & 0xf;
		
		String fileAddr = this.getServletContext().getRealPath("/WEB-INF/upload") 
						+"\\" + dir1 + "\\" + dir2 + "\\" + uuidName;
		
		System.out.println("fileAddr="+fileAddr);
		
		return fileAddr;
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {


	}



 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值