📄 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 + -