先利用上传文件组件,把要上传的文件存入到一个临时路径,然后把临时路径的传递到uploadSingle(String sourceFile, String appId)方法中
/注:String 类型的sourceFile就是传的临时路径,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;
}
}