⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadaction.java

📁 实现java断点续传多线程处理原代码,三种形式下载,
💻 JAVA
字号:
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.download.struts;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.RandomAccess;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.download.SiteFileFetch;
import com.download.SiteInfoBean;



/**
 * 文件续载
 * @author yeqc
 * @version 1.0
 * @date 2008-06-28
 *   
 */
public class DownLoadAction extends Action {
	/**
	 * 缓冲大小
	 */
	private static final int BUFFERSIZE=2048;

	
	/** 
	 * 文件续载
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return ActionForward
	 */
	public ActionForward execute(ActionMapping mapping,
									ActionForm form,
									HttpServletRequest request,
									HttpServletResponse response) {

		
		//解决中文代码问题。
		response.setContentType("text/html;charset=GBK");
		//获取文档相对路径
		String urlFile="\\downfile\\doc\\MyEclipse5.0.1GA_E3.2.exe";
		
		String fileParameter=request.getParameter("fileParameter");
		if(fileParameter==null){
			fileParameter="";
		}
		
		Integer a=Integer.parseInt(fileParameter);
	    System.out.println("fileParameter: "+fileParameter);
		   switch(a.intValue()){
		   case 1:this.downloadFileOne(urlFile,1, request,response);//文件下载一
		   		break;
		   case 2: downloadFileSecond("http://go.microsoft.com/fwlink/?linkid=57034");
		   		break;	
		   case 3:this.downloadFileThree(urlFile, 1, request, response);//文件下载二
		   		break;
		   default:return mapping.getInputForward();
		   }
		   
		   return null;
		   
		   
		/**------------测试方法一(成功):(BufferedStream-缓冲流下载)调用文件下载函数一------------------*/
		
		//获取文档相对路径
		/*String urlFile1="\\downfile\\doc\\MyEclipse5.0.1GA_E3.2.exe";
		this.downloadFileOne(urlFile1,1, request,response);
		
		*/
		
		/**------------测试方法二(摸索中):调用(RandomAccessFile-随机访问文件下载)文件下载函数二------------------*/

		/*URL url;
		try {
			url = new URL("http://down.sandai.net/Thunder5.8.1.507.exe");
			String fileName="down.zip";
			
			this.downloadFileSecond(url, filename);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		
		
		
		/**------------测试方法三(成功):调用(FileStream-文件流下载)文件下载函数三------------------*/
		
		/*String urlFile3="\\downfile\\doc\\MyEclipse5.0.1GA_E3.2.exe";
		this.downloadFileThree(urlFile3, 1, request, response);*/
	

		
		
		   //	File dir = new File(request.getRealPath("/")+"/downfile");
		//	File dir = new File("d:/");
			/*File[] files = null;
			if(dir != null && dir.isDirectory()){
		 	 	files = dir.listFiles();
		 	}
			for (int i=0;files != null && i<files.length;i++){
                String name = files[i].getName();
                name = URLEncoder.encode(name);
                //文件类型过滤,只能是doc,xls,ppt类型
                if(name!=null 
                   &&( name.lastIndexOf("doc")!= -1 //文件类型后缀
                       || name.toLowerCase().lastIndexOf("xls")!= -1
                       || name.toLowerCase().lastIndexOf("ppt")!= -1
                       || name.toLowerCase().lastIndexOf("pdf")!= -1
                       || name.toLowerCase().lastIndexOf("txt")!= -1
                       || name.toLowerCase().lastIndexOf("sql")!= -1
                     )){
                	
                System.out.println(":name:"+files[i].getName());
                	
                }
                
                }*/

	}
	

	/**
	 * (BufferedStream-缓冲流)文件续载方法一
	 * @param 文件路径
	 * @param 线程数
	 * @param request
	 * @param response
	 */
	public void downloadFileOne(String urlFile,
								int threadNum,
								HttpServletRequest request,
								HttpServletResponse response){
		
		 System.out.println("------(BufferedStream-缓冲流下载)----------");
		 java.io.BufferedInputStream bis=null;
		 java.io.BufferedOutputStream  bos=null;
		
		 //文件路径中获取文件名
		 String filename = urlFile.substring(urlFile.lastIndexOf("\\") + 1, urlFile.length());    
		try{
		 request.setCharacterEncoding("GBK");
		 response.setContentType("application/vnd.ms-word");
		 response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
		 bis =new java.io.BufferedInputStream(new java.io.FileInputStream(request.getRealPath(urlFile)));//文件相对路径
		 bos=new java.io.BufferedOutputStream(response.getOutputStream()); 
		 byte[] buff = new byte[BUFFERSIZE];
		 int bytesRead;
		 while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
			 bos.write(buff,0,bytesRead);
		 }
		}
		catch(Exception e){
		 e.printStackTrace();
		}
		finally {
		 if (bis != null)
			try {
				bis.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}
		 if (bos != null)
			try {
				bos.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}
		}

	}
		//  String urlFile; //网络地址
	        //int threadNum; //文件下载线程数
	       // String localAddress; //本地地址
	       // urlFile = "http://www.netbox.cn:88/download/nbsetup.EXE";
	        //现在还只能够处理1到9个线程,后面的的版本再增加
	      //  threadNum = 9;
	        //注:路径的形式一定要写出下面的格式,特别的最好的路径称号不能缺
	       // localAddress = "d:\\multiDownTest\\";//这个文件夹如果不存在,会自动创建
	              //这里采用三个软件同时下载,当然你可以多下载,使用就是这么方便
	      //  DownFile downFile = new DownFile(urlFile, threadNum, localAddress);
	       // downFile.startDownFile();

	       // urlFile = "http://dl.360safe.com/setup.exe";

	      //  DownFile downFile1 = new DownFile(urlFile, threadNum, localAddress);
	       // downFile1.startDownFile();
	      //  urlFile = "http://down.sandai.net/Thunder5.6.8.329.exe";
	      //  DownFile downFile2 = new DownFile(urlFile, threadNum, localAddress); 
	        //downFile2.startDownFile();

	  //  }

	
	
	
	
	/**
	 * (RandomAccessFile-随机访问文件)文件续载方法二
	 * @param 文件路径
	 * @param 线程数
	 * @param request
	 * @param response
	 */
	public void downloadFileSecond(String url){
		//http://localhost:8080/down.zip
		try{
		SiteInfoBean bean = new SiteInfoBean(url,"f:\\temp","vc2005express.iso",3);
		System.out.print("---222-start------");
		SiteFileFetch fileFetch = new SiteFileFetch(bean);
		fileFetch.start();
		}catch(Exception e){
			e.printStackTrace();
		}
		
	
	}
	
	
	
	/**
	 * (FileStream-文件流)文件流下载方法三
	 * @param 文件路径
	 * @param 线程数
	 * @param request
	 * @param response
	 */
	public void downloadFileThree(String urlFile,
									int threadNum,
									HttpServletRequest request,
									HttpServletResponse response){
		
		System.out.println("------(FileStream-文件流)----------");
		 OutputStream o=null;
		try {
			//文件路径中获取文件名
		    String filename = urlFile.substring(urlFile.lastIndexOf("\\") + 1, urlFile.length()); 
		    
			o = response.getOutputStream();
			byte[] b = new byte[BUFFERSIZE];
		    File file = new File(filename);
		    response.reset();
	
		    response.setHeader("Content-disposition", "inline;filename=" + filename);
		    long fileLength = file.length();
		    String length = String.valueOf(fileLength);
		    response.setHeader("Content_Length", length);
		    FileInputStream in = new FileInputStream(request.getRealPath(urlFile));
		    int n ;
		    while((n = in.read(b)) != -1) {
		    	o.write(b, 0, n);
		    	}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -