?? downloadaction.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 + -