您的位置:首页 > 理论基础 > 计算机网络

HttpClient 学习整理

2014-08-07 16:25 507 查看
先利用上传文件组件,把要上传的文件存入到一个临时路径,然后把临时路径的传递到uploadSingle(String sourceFile, String appId)方法中

/注:String 类型的sourceFile就是传的临时路径,appId是上传到服务器区域的唯一标示

// 临时保存上传的附件
	public void saveMediaData(FileUploadEvent event) {
		MediaStoreConfiguration msc = AirScapeApplicationContext.getBean(
				"MediaStoreConfig", MediaStoreConfiguration.class);
		//String module = msc.getValue("ms.emall.module.global");

		System.out.println(event.getFile().getFileName());
		String filename = event.getFile().getFileName();
		String surffix = "." + FilenameUtils.getExtension(filename);
		//String mtype = event.getFile().getContentType();

		if (mediaService.ifMediaDataExists(MallConstant.EMALL_APP_ID, filename))
		{
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(FacesMessage.SEVERITY_INFO, "File Exists!" + filename, ""));
			return;
		}
		
		File file;
		String url;
		String tmpName = String.valueOf(System.currentTimeMillis());
		try {
			file = File.createTempFile(tmpName,surffix);//创建一个文件默认存到临时目录下的
			FileUtils.copyInputStreamToFile(event.getFile().getInputstream(),
					file);//把要上传的文件存入到file文件中
			log.debug(file.getAbsolutePath());
			log.debug(file.getName());
			
			
			url = MediaKit.uploadSingle(file.getAbsolutePath(), MallConstant.EMALL_APP_ID);//上传到服务器之后,,服务器返回一个url,可以通过
                        //输入浏览器地址来访问到上传到服务器的文件(各种类型)

                        file.delete();//把临时文件删除
			//下面就是把这个文件封住成MediaData类存入到数据库中。。。。。。。。。。。。。。。。。。
			MediaData md = new MediaData();

			md.setModule(MallConstant.EMALL_APP_ID);
			md.setName(filename);
			md.setMimeType(surffix);
			md.setUrl(url);
			boolean result = mediaService.saveNewMedia(md);
			if (result) {
				FacesContext.getCurrentInstance().addMessage(null,
						new FacesMessage(FacesMessage.SEVERITY_INFO, "Success!" + filename, ""));
			} else {
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_INFO, "Failed!" + filename,
								""));
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}


利用HttpClient以post形式上传文件,删除文件

package cn.common.util;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.regex.MatchResult;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.EncoderException;
import org.apache.commons.codec.net.URLCodec;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;

public class MediaKit {
	public static final Map<String, String> MIME_TYPES = new HashMap<String, String>();

	public static final String DEFAULT_MIME_TYPE = "*";

	public static final String DEFAULT_CODEC_CHARSET = "UTF-8";

	public static final String MEDIA_PATTERN = "(\\w{8})(\\d{4})(\\d{2})(\\d{2})(.*)";
	public static final String MEDIA_APP = "APPNAME";
	public static final String MEDIA_KEY = "KEY";
	
	public static final String MEDIA_YEAR = "YEAR";
	public static final String MEDIA_MONTH = "MONTH";
	public static final String MEDIA_DAY = "DAY";
	public static final String MEDIA_FILENAME = "FILE";
	public static final String MEDIA_FILE_EXTENTION = "EXTENTION";
	public static final String MEDIA_PATH = "PATH";
	public static final String MEDIA_DATE_FMT = "yyyyMMdd";
	public static final String MEDIA_FILE_FMT = "HHmmssSSS";
	
	public static final String MEDIA_PATH_PATTERN = "%s/%s/%s/%s";
	

	static {
		MIME_TYPES.put("*", "application/octet-stream");
		MIME_TYPES.put("323", "text/h323");
		MIME_TYPES.put("acx", "application/internet-property-stream");
		MIME_TYPES.put("ai", "application/postscript");
		MIME_TYPES.put("aif", "audio/x-aiff");
		MIME_TYPES.put("aifc", "audio/x-aiff");
		MIME_TYPES.put("aiff", "audio/x-aiff");
		MIME_TYPES.put("asf", "video/x-ms-asf");
		MIME_TYPES.put("asr", "video/x-ms-asf");
		MIME_TYPES.put("asx", "video/x-ms-asf");
		MIME_TYPES.put("au", "audio/basic");
		MIME_TYPES.put("avi", "video/x-msvideo");
		MIME_TYPES.put("axs", "application/olescript");
		MIME_TYPES.put("bas", "text/plain");
		MIME_TYPES.put("bcpio", "application/x-bcpio");
		MIME_TYPES.put("bin", "application/octet-stream");
		MIME_TYPES.put("bmp", "image/bmp");
		MIME_TYPES.put("bz", "application/x-bzip");
		MIME_TYPES.put("bz2", "application/x-bzip2");
		MIME_TYPES.put("c", "text/plain");
		MIME_TYPES.put("cat", "application/vnd.ms-pkiseccat");
		MIME_TYPES.put("cdf", "application/x-cdf");
		MIME_TYPES.put("cer", "application/x-x509-ca-cert");
		MIME_TYPES.put("class", "application/octet-stream");
		MIME_TYPES.put("clp", "application/x-msclip");
		MIME_TYPES.put("cmx", "image/x-cmx");
		MIME_TYPES.put("cod", "image/cis-cod");
		MIME_TYPES.put("cpio", "application/x-cpio");
		MIME_TYPES.put("crd", "application/x-mscardfile");
		MIME_TYPES.put("crl", "application/pkix-crl");
		MIME_TYPES.put("crt", "application/x-x509-ca-cert");
		MIME_TYPES.put("csh", "application/x-csh");
		MIME_TYPES.put("css", "text/css");
		MIME_TYPES.put("dcr", "application/x-director");
		MIME_TYPES.put("der", "application/x-x509-ca-cert");
		MIME_TYPES.put("dir", "application/x-director");
		MIME_TYPES.put("dll", "application/x-msdownload");
		MIME_TYPES.put("dms", "application/octet-stream");
		MIME_TYPES.put("doc", "application/msword");
		MIME_TYPES.put("dot", "application/msword");
		MIME_TYPES.put("dvi", "application/x-dvi");
		MIME_TYPES.put("dxr", "application/x-director");
		MIME_TYPES.put("eps", "application/postscript");
		MIME_TYPES.put("etx", "text/x-setext");
		MIME_TYPES.put("evy", "application/envoy");
		MIME_TYPES.put("exe", "application/octet-stream");
		MIME_TYPES.put("fif", "application/fractals");
		MIME_TYPES.put("flr", "x-world/x-vrml");
		MIME_TYPES.put("gif", "image/gif");
		MIME_TYPES.put("gtar", "application/x-gtar");
		MIME_TYPES.put("gz", "application/x-gzip");
		MIME_TYPES.put("h", "text/plain");
		MIME_TYPES.put("hdf", "application/x-hdf");
		MIME_TYPES.put("hlp", "application/winhlp");
		MIME_TYPES.put("hqx", "application/mac-binhex40");
		MIME_TYPES.put("hta", "application/hta");
		MIME_TYPES.put("htc", "text/x-component");
		MIME_TYPES.put("htm", "text/html");
		MIME_TYPES.put("html", "text/html");
		MIME_TYPES.put("htt", "text/webviewhtml");
		MIME_TYPES.put("ico", "image/x-icon");
		MIME_TYPES.put("ief", "image/ief");
		MIME_TYPES.put("iii", "application/x-iphone");
		MIME_TYPES.put("ins", "application/x-internet-signup");
		MIME_TYPES.put("isp", "application/x-internet-signup");
		MIME_TYPES.put("jfif", "image/pipeg");
		MIME_TYPES.put("jpe", "image/jpeg");
		MIME_TYPES.put("jpeg", "image/jpeg");
		MIME_TYPES.put("jpg", "image/jpeg");
		MIME_TYPES.put("js", "application/x-javascript");
		MIME_TYPES.put("latex", "application/x-latex");
		MIME_TYPES.put("lha", "application/octet-stream");
		MIME_TYPES.put("lsf", "video/x-la-asf");
		MIME_TYPES.put("lsx", "video/x-la-asf");
		MIME_TYPES.put("lzh", "application/octet-stream");
		MIME_TYPES.put("m13", "application/x-msmediaview");
		MIME_TYPES.put("m14", "application/x-msmediaview");
		MIME_TYPES.put("m3u", "audio/x-mpegurl");
		MIME_TYPES.put("man", "application/x-troff-man");
		MIME_TYPES.put("mdb", "application/x-msaccess");
		MIME_TYPES.put("me", "application/x-troff-me");
		MIME_TYPES.put("mht", "message/rfc822");
		MIME_TYPES.put("mhtml", "message/rfc822");
		MIME_TYPES.put("mid", "audio/mid");
		MIME_TYPES.put("mny", "application/x-msmoney");
		MIME_TYPES.put("mov", "video/quicktime");
		MIME_TYPES.put("movie", "video/x-sgi-movie");
		MIME_TYPES.put("mp2", "video/mpeg");
		MIME_TYPES.put("mp3", "audio/mpeg");
		MIME_TYPES.put("mpa", "video/mpeg");
		MIME_TYPES.put("mpe", "video/mpeg");
		MIME_TYPES.put("mpeg", "video/mpeg");
		MIME_TYPES.put("mpg", "video/mpeg");
		MIME_TYPES.put("mpp", "application/vnd.ms-project");
		MIME_TYPES.put("mpv2", "video/mpeg");
		MIME_TYPES.put("ms", "application/x-troff-ms");
		MIME_TYPES.put("mvb", "application/x-msmediaview");
		MIME_TYPES.put("nws", "message/rfc822");
		MIME_TYPES.put("oda", "application/oda");
		MIME_TYPES.put("p10", "application/pkcs10");
		MIME_TYPES.put("p12", "application/x-pkcs12");
		MIME_TYPES.put("p7b", "application/x-pkcs7-certificates");
		MIME_TYPES.put("p7c", "application/x-pkcs7-mime");
		MIME_TYPES.put("p7m", "application/x-pkcs7-mime");
		MIME_TYPES.put("p7r", "application/x-pkcs7-certreqresp");
		MIME_TYPES.put("p7s", "application/x-pkcs7-signature");
		MIME_TYPES.put("pbm", "image/x-portable-bitmap");
		MIME_TYPES.put("pdf", "application/pdf");
		MIME_TYPES.put("pfx", "application/x-pkcs12");
		MIME_TYPES.put("pgm", "image/x-portable-graymap");
		MIME_TYPES.put("pko", "application/ynd.ms-pkipko");
		MIME_TYPES.put("pma", "application/x-perfmon");
		MIME_TYPES.put("pmc", "application/x-perfmon");
		MIME_TYPES.put("pml", "application/x-perfmon");
		MIME_TYPES.put("pmr", "application/x-perfmon");
		MIME_TYPES.put("pmw", "application/x-perfmon");
		MIME_TYPES.put("png", "image/png");
		MIME_TYPES.put("pnm", "image/x-portable-anymap");
		MIME_TYPES.put("pot,", "application/vnd.ms-powerpoint");
		MIME_TYPES.put("ppm", "image/x-portable-pixmap");
		MIME_TYPES.put("pps", "application/vnd.ms-powerpoint");
		MIME_TYPES.put("ppt", "application/vnd.ms-powerpoint");
		MIME_TYPES.put("prf", "application/pics-rules");
		MIME_TYPES.put("ps", "application/postscript");
		MIME_TYPES.put("pub", "application/x-mspublisher");
		MIME_TYPES.put("qt", "video/quicktime");
		MIME_TYPES.put("ra", "audio/x-pn-realaudio");
		MIME_TYPES.put("ram", "audio/x-pn-realaudio");
		MIME_TYPES.put("ras", "image/x-cmu-raster");
		MIME_TYPES.put("rgb", "image/x-rgb");
		MIME_TYPES.put("rm", "application/vnd.rn-realmedia");
		MIME_TYPES.put("rmi", "audio/mid");
		MIME_TYPES.put("roff", "application/x-troff");
		MIME_TYPES.put("rtf", "application/rtf");
		MIME_TYPES.put("rtx", "text/richtext");
		MIME_TYPES.put("scd", "application/x-msschedule");
		MIME_TYPES.put("sct", "text/scriptlet");
		MIME_TYPES.put("setpay", "application/set-payment-initiation");
		MIME_TYPES.put("setreg", "application/set-registration-initiation");
		MIME_TYPES.put("sh", "application/x-sh");
		MIME_TYPES.put("shar", "application/x-shar");
		MIME_TYPES.put("sit", "application/x-stuffit");
		MIME_TYPES.put("snd", "audio/basic");
		MIME_TYPES.put("spc", "application/x-pkcs7-certificates");
		MIME_TYPES.put("spl", "application/futuresplash");
		MIME_TYPES.put("src", "application/x-wais-source");
		MIME_TYPES.put("sst", "application/vnd.ms-pkicertstore");
		MIME_TYPES.put("stl", "application/vnd.ms-pkistl");
		MIME_TYPES.put("stm", "text/html");
		MIME_TYPES.put("svg", "image/svg+xml");
		MIME_TYPES.put("sv4cpio", "application/x-sv4cpio");
		MIME_TYPES.put("sv4crc", "application/x-sv4crc");
		MIME_TYPES.put("swf", "application/x-shockwave-flash");
		MIME_TYPES.put("t", "application/x-troff");
		MIME_TYPES.put("tar", "application/x-tar");
		MIME_TYPES.put("tcl", "application/x-tcl");
		MIME_TYPES.put("tex", "application/x-tex");
		MIME_TYPES.put("texi", "application/x-texinfo");
		MIME_TYPES.put("texinfo", "application/x-texinfo");
		MIME_TYPES.put("tgz", "application/x-compressed");
		MIME_TYPES.put("tif", "image/tiff");
		MIME_TYPES.put("tiff", "image/tiff");
		MIME_TYPES.put("tr", "application/x-troff");
		MIME_TYPES.put("trm", "application/x-msterminal");
		MIME_TYPES.put("tsv", "text/tab-separated-values");
		MIME_TYPES.put("txt", "text/plain");
		MIME_TYPES.put("uls", "text/iuls");
		MIME_TYPES.put("ustar", "application/x-ustar");
		MIME_TYPES.put("vcf", "text/x-vcard");
		MIME_TYPES.put("vrml", "x-world/x-vrml");
		MIME_TYPES.put("wav", "audio/x-wav");
		MIME_TYPES.put("wcm", "application/vnd.ms-works");
		MIME_TYPES.put("wdb", "application/vnd.ms-works");
		MIME_TYPES.put("wks", "application/vnd.ms-works");
		MIME_TYPES.put("wmf", "application/x-msmetafile");
		MIME_TYPES.put("wps", "application/vnd.ms-works");
		MIME_TYPES.put("wri", "application/x-mswrite");
		MIME_TYPES.put("wrl", "x-world/x-vrml");
		MIME_TYPES.put("wrz", "x-world/x-vrml");
		MIME_TYPES.put("x-png", "image/png");
		MIME_TYPES.put("xaf", "x-world/x-vrml");
		MIME_TYPES.put("xbm", "image/x-xbitmap");
		MIME_TYPES.put("xla", "application/vnd.ms-excel");
		MIME_TYPES.put("xlc", "application/vnd.ms-excel");
		MIME_TYPES.put("xlm", "application/vnd.ms-excel");
		MIME_TYPES.put("xls", "application/vnd.ms-excel");
		MIME_TYPES.put("xlt", "application/vnd.ms-excel");
		MIME_TYPES.put("xlw", "application/vnd.ms-excel");
		MIME_TYPES.put("xof", "x-world/x-vrml");
		MIME_TYPES.put("xpm", "image/x-xpixmap");
		MIME_TYPES.put("xwd", "image/x-xwindowdump");
		MIME_TYPES.put("z", "application/x-compress");
		MIME_TYPES.put("zip", "application/zip");
	};

	public synchronized static String getMimeType(String surffix) {
		String val = MIME_TYPES.get(surffix);
		if (null != val) {
			return val;
		}
		return MIME_TYPES.get(DEFAULT_MIME_TYPE);
	}

	public static boolean checkMediaKey(String mediaKey) {
		String val = CryptoKit.decode(mediaKey);
		System.out.println("decode result:" + val);

		String path = FilenameUtils.getPath(val);
		String name = FilenameUtils.getName(val);
		if (null == path || null == name || path.isEmpty() || name.isEmpty())
			return false;
		return true;
	}
	

	
	public static boolean parseMediaKey(String mediaKey,
			Map<String, String> result) {
		Scanner scanner = new Scanner(mediaKey);

		while (scanner.hasNext(MEDIA_PATTERN)) {
			scanner.next(MEDIA_PATTERN);
			MatchResult match = scanner.match();
			String app = match.group(1);
			result.put(MEDIA_APP, app);
			String year = match.group(2);
			result.put(MEDIA_YEAR, year);
			String month = match.group(3);
			result.put(MEDIA_MONTH, month);
			String day = match.group(4);
			result.put(MEDIA_DAY, day);
			String file = match.group(5);
			result.put(MEDIA_FILENAME, file);
			result.put(MEDIA_PATH,
					String.format(MEDIA_PATH_PATTERN, app, year, month, day));
			result.put(MEDIA_FILE_EXTENTION, FilenameUtils.getExtension(file));
			scanner.close();
			return true;
		}
		scanner.close();
		return false;

	}

	 

	public static String URLEncode(String data) {
		URLCodec codec = new URLCodec(DEFAULT_CODEC_CHARSET);
		try {
			return codec.encode(data);
		} catch (EncoderException e) {
			e.printStackTrace();
		}
		return "";
	}

	public static String URLDecode(String data) {
		URLCodec codec = new URLCodec(DEFAULT_CODEC_CHARSET);
		try {
			return codec.decode(data);
		} catch (DecoderException e) {
			e.printStackTrace();
		}
		return "";
	}

	public static String generateMediaKey(String appId,
			Date date, String fileName) {
		SimpleDateFormat sdf = new SimpleDateFormat(MEDIA_DATE_FMT);
		
		String date1 = sdf.format(date);
		
		String key = appId + date1 + fileName;
		System.out.println(key);
		return URLEncode(CryptoKit.encode(key));
	}

	
	public static void main (String args[]) {
		String key = generateMediaKey("a1b2c3d4", new Date(), "asdfasd.jpg");
		System.out.println(key);
		Map<String,String> map = new TreeMap<String, String>();
		parseMediaKey(key, map);
		System.out.println(map);
	}

	/**
	 * 通过httpClient上传文件
	 * 
	 * @param source
	 *            文件对象
	 * @param fileName
	 *            上传后保存的文件名称
	 * @param pathIdentity
	 *            唯一性标识(用于隔离应用和模块)
	 * @return
	 */
	public static String uploadSingle(String sourceFile, String appId) {
		MediaConfiguration config = AirScapeApplicationContext.getBean(
				"MediaConfig", MediaConfiguration.class);

		String upUrl = config.getUploadUrl();
		//String downUrl = config.getDownloadUrl();

		String path = sourceFile;
		String name = FilenameUtils.getName(path);
		String surffix = FilenameUtils.getExtension(path);

		//String appId = app2ModuleId;

		// System.out.println("Name:" + name);
		File file = new File(path);

		if (!(file.exists() && file.isFile() && file.canRead())) {
			return null;
		}

		HttpClient httpClient = new HttpClient();
		// httpClient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
		httpClient.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT,
				50000);
		PostMethod postMethod = new PostMethod(upUrl);
		String key = MediaKit.generateMediaKey(appId, new Date(), name);
		StringPart part1 = new StringPart(MEDIA_FILENAME, name);
		StringPart part2 = new StringPart(MEDIA_KEY, key);
		StringPart part3 = new StringPart(MEDIA_APP, appId);

		// StringPart part3 = new StringPart(MediaConstant.MEDIA_KEY, key);

		try {

			// FilePart:用来上传文件的类
			FilePart fp = new FilePart(name, file);
			System.out.println("Mime Type:" + MediaKit.getMimeType(surffix));
			fp.setContentType(MediaKit.getMimeType(surffix));

			Part[] parts = { part1, part2, part3, fp };

			// 对于MIME类型的请求,httpclient建议全用MulitPartRequestEntity进行包装
			MultipartRequestEntity mre = new MultipartRequestEntity(parts,
					postMethod.getParams());

			postMethod.setRequestEntity(mre);

			// httpClient.getHttpConnectionManager().getParams()
			// .setConnectionTimeout(50000);// 设置连接时间
			int status = httpClient.executeMethod(postMethod);
			System.out.println(status);
			if (status != HttpStatus.SC_OK) {
				System.out.println("Upload File Failed with: " + status);
			} else if (status == HttpStatus.SC_OK) {
				String durl = postMethod.getResponseBodyAsString();
				System.out.println("Upload OK, access URL:" + durl);
				return durl;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static boolean removeFile(String emallAppId, String url) {
		MediaConfiguration config = AirScapeApplicationContext.getBean(
				"MediaConfig", MediaConfiguration.class);

		String rmUrl = config.getRemoveUrl();
		//String downUrl = config.getDownloadUrl();
		
		//http://localhost:8080/images/download.do?APPNAME=EMALL001&KEY=ZKDCaCVbbQGQ%252BApecu%252Fqx1ntsUYDHR8aQ4gBpeLgUW8%253D&FILE=14065411034173946756768873540979.jpg
			
		String part1 = url.substring(url.indexOf("?"));
		//String parts[] = StringUtils.splitByWholeSeparator(part1, "&");
		
		rmUrl = rmUrl + part1;
		
		System.out.println("Remove URL:"+ rmUrl);
		
		HttpClient httpClient = new HttpClient();
		// httpClient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
		httpClient.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT,
				50000);
		GetMethod getMethod = new GetMethod(rmUrl);
		//String key = MediaKit.generateMediaKey(emallAppId, new Date(), name);
		//StringPart part1 = new StringPart(MEDIA_FILENAME, "");
		//StringPart part2 = new StringPart(MEDIA_KEY, "");
		//StringPart part3 = new StringPart(MEDIA_APP, "");

		// StringPart part3 = new StringPart(MediaConstant.MEDIA_KEY, key);

		try {

			// httpClient.getHttpConnectionManager().getParams()
			// .setConnectionTimeout(50000);// 设置连接时间
			int status = httpClient.executeMethod(getMethod);
			System.out.println(status);
			if (status != HttpStatus.SC_OK) {
				System.out.println("Remove File Failed!");
				return false;
			} else if (status == HttpStatus.SC_OK) {
				System.out.println("Remove File OK");
				return true;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: