package cn.base.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Vector;

@SuppressWarnings("all")
public class HttpGet {
	public final static boolean DEBUG = true;// 调试用

	private static int BUFFER_SIZE = 8096;// 缓冲区大小

	private Vector vDownLoad = new Vector();// URL列表

	private Vector vFileList = new Vector();// 下载后的保存文件名列表

	/**
	 * 构造方法
	 */
	public HttpGet() {
	}

	/**
	 * 清除下载列表
	 */
	public void resetList() {
		vDownLoad.clear();
		vFileList.clear();
	}

	/**
	 * 增加下载列表项
	 * 
	 * @param url String
	 * @param filename String
	 */
	public void addItem(String url, String filename) {
		vDownLoad.add(url);
		vFileList.add(filename);
	}

	/**
	 * 根据列表下载资源
	 */
	public void downLoadByList() {
		String url = null;
		String filename = null;
		// 按列表顺序保存资源
		for (int i = 0; i < vDownLoad.size(); i++) {
			url = (String) vDownLoad.get(i);
			filename = (String) vFileList.get(i);
			try {
				saveToFile(url, filename);
			} catch (IOException err) {
				if (DEBUG) {
					System.out.println("资源[" + url + "]下载失败!!!");
				}
			}
		}
		if (DEBUG) {
			System.out.println("下载完成!!!");
		}
	}

	/**
	 * 将HTTP资源另存为文件
	 * 
	 * @param destUrl String
	 * @param fileName String
	 * @throws Exception
	 */
	public void saveToFile(String destUrl, String fileName) throws IOException {
		FileOutputStream fos = null;
		BufferedInputStream bis = null;
		HttpURLConnection httpUrl = null;

		int index = fileName.lastIndexOf("\\");
		String tmpFile = fileName.substring(0, index);
		File f = new File(tmpFile);
		if (!f.exists()) {
			f.mkdirs();
		}
		URL url = null;
		byte[] buf = new byte[BUFFER_SIZE];
		int size = 0;
		// 建立链接
		url = new URL(destUrl);
		httpUrl = (HttpURLConnection) url.openConnection();
		// 连接指定的资源
		httpUrl.connect();
		// 获取网络输入流
		bis = new BufferedInputStream(httpUrl.getInputStream());
		// 建立文件
		fos = new FileOutputStream(fileName);
		if (this.DEBUG)
			System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件["
					+ fileName + "]");
		// 保存文件
		while ((size = bis.read(buf)) != -1)
			fos.write(buf, 0, size);
		fos.close();
		bis.close();
		httpUrl.disconnect();
	}

	/**
	 * 设置代理服务器
	 * 
	 * @param proxy String
	 * @param proxyPort String
	 */
	public void setProxyServer(String proxy, String proxyPort) {
		// 设置代理服务器
		System.getProperties().put("proxySet", "true");
		System.getProperties().put("proxyHost", proxy);
		System.getProperties().put("proxyPort", proxyPort);

	}

	/**
	 * 设置认证用户名与密码
	 * 
	 * @param uid String
	 * @param pwd String
	 */
	public void setAuthenticator(String uid, String pwd) {
		// Authenticator.setDefault(new MyAuthenticator(uid, pwd));
	}

	/**
	 * 主方法(用于测试)
	 * 
	 * @param argv String[]
	 */
	public static void main(String argv[]) {

		HttpGet oInstance = new HttpGet();
		try {
			// 开始下载
			long tt = System.currentTimeMillis();
			oInstance.addItem(
					"C:/webOcx/200000000100011801#00#01#20081128085927125.jpg",
					"C:/b.gif");
			long tt1 = System.currentTimeMillis();
			tt1 = tt1 - tt;
			System.out.println("一共耗时：" + tt1 + "second");
			oInstance.downLoadByList();
		} catch (Exception err) {
		}
	}
}
