亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? filesystemsaver.java

?? 個人Blog java編寫的Blog可以直接使用!
?? JAVA
字號:
/*
 *  FileSystemSaver.java
 *  
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *  
 *  Author: Winter Lau (javayou@gmail.com)
 *  http://dlog4j.sourceforge.net
 */
package com.liusoft.dlog4j.photo;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;

import javax.imageio.ImageIO;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.upload.FormFile;

import com.liusoft.dlog4j.Globals;
import com.liusoft.dlog4j.HttpContext;
import com.liusoft.dlog4j.util.ImageUtils;
import com.liusoft.dlog4j.util.StringUtils;

/**
 * 將照片保存在文件系統中
 * @author Winter Lau
 */
public class FileSystemSaver implements PhotoSaver {

	private final static Log log = LogFactory.getLog(FileSystemSaver.class);
	
	/* (non-Javadoc)
	 * @see com.liusoft.dlog4j.photo.PhotoSaver#save(java.io.InputStream)
	 */
	public Photo save(HttpContext context, FormFile imgFile, boolean autoRotate) throws IOException {
		String extendName = StringUtils.getFileExtend(imgFile.getFileName()).toLowerCase();
		String[] urls = this.createNewPhotoURI(context, extendName);
		if(urls==null)
			return null;

		String origionalPath = urls[0];
		String previewPath = urls[1];
		//保存上傳的文件
		{
			ImageUtils.writeToFile(imgFile, origionalPath);
		}
		
		Photo photo = new Photo();
		
		if(ImageUtils.isJPG(extendName)){
			try{
				ImageUtils.fillExifInfo(origionalPath, photo);
				int orient = photo.getOrientation();
				if(autoRotate && orient>0 && orient <=8){
					//Rotate the image
					ImageUtils.rotateImage(origionalPath, orient);
				}
			}catch(Exception e){
				log.error("Exception occur when reading EXIF of " + origionalPath, e);
			}
		}
		else if(ImageUtils.isBMP(extendName)){
			String jpgName = ImageUtils.BMP_TO_JPG(origionalPath);
			if(jpgName!=null){
				//刪除bmp文件
				if(new File(origionalPath).delete())
					origionalPath = jpgName;
			}
		}
		
		//獲取圖片的基本信息,例如大小尺寸象素等
		File fOrigionalImage = new File(origionalPath);
		photo.setSize((int)fOrigionalImage.length());
		BufferedImage oldImage = (BufferedImage)ImageIO.read(fOrigionalImage);
		int old_width = oldImage.getWidth();
		int old_height = oldImage.getHeight();
		photo.setWidth(old_width);
		photo.setHeight(old_height);
		photo.setColorBit(oldImage.getColorModel().getPixelSize());
		photo.setFileName(imgFile.getFileName());
		
		{
			//將原圖片限定在1024*768的范圍內
			int ori_width = MAX_WIDTH, ori_height = MAX_HEIGHT;
			boolean regenerate_img = true;
			if(old_width <= MAX_WIDTH && old_height <= MAX_HEIGHT){
				ori_width = old_width;
				ori_height = old_height;
				regenerate_img = false;
			}
			else if(old_width > MAX_WIDTH && old_height > MAX_HEIGHT){
				ori_width = MAX_WIDTH;
				ori_height = old_height * ori_width / old_width;
			}
			else if(old_width > MAX_WIDTH && old_height <= MAX_HEIGHT){
				ori_width = MAX_WIDTH;
				ori_height = old_height;
			}
			else if(old_width <= MAX_WIDTH && old_height > MAX_HEIGHT){
				ori_height = MAX_HEIGHT;
				ori_width = old_width * ori_height / old_height;
			}
			if(regenerate_img){	
				photo.setWidth(ori_width);
				photo.setHeight(ori_height);
				ImageUtils.createPreviewImage(new FileInputStream(origionalPath),
						origionalPath, ori_width, ori_height);
				photo.setSize((int)new File(origionalPath).length());
			}
		}
		
		//計算略縮圖的最適合尺寸
		int preview_width, preview_height;
		preview_width = Math.min(PREVIEW_WIDTH, photo.getWidth());
		if(photo.getHeight() <= PREVIEW_HEIGHT)
			preview_height = photo.getHeight();
		else{
			//按比例對圖像高度進行壓縮
			preview_height = photo.getHeight() * preview_width / photo.getWidth();
		}
		
		if(preview_width == photo.getWidth() && preview_height == photo.getHeight()){
			//圖像不變
			previewPath = origionalPath;
		}
		else{		
			//生成略縮圖
			if(ImageUtils.isImage(extendName)){
				previewPath = ImageUtils.createPreviewImage(new FileInputStream(origionalPath),
						previewPath, preview_width, preview_height);
			}
			else{
				photo = null;
				return null;
			}
		}
		//計算圖片的url
		//String contextPath = context.getRequest().getContextPath() + "/";
		String uploadPath = this.getUploadPath(context);
		String path1 = origionalPath.substring(uploadPath.length());
		String path2 = previewPath.substring(uploadPath.length());
		photo.setImageURL(getPhotoBaseURI(context)+StringUtils.replace(path1, File.separator, "/"));
		photo.setPreviewURL(getPhotoBaseURI(context)+StringUtils.replace(path2, File.separator, "/"));
		return photo;
	}
	
	/* (non-Javadoc)
	 * @see com.liusoft.dlog4j.photo.PhotoSaver#delete(java.lang.String)
	 */
	public boolean delete(HttpContext ctx, String imgURL) throws IOException {
		String uploadPath = this.getUploadPath(ctx);
		String baseURI = this.getPhotoBaseURI(ctx);
		String path = uploadPath
				+ StringUtils.replace(imgURL.substring(baseURI.length()), "/",
						File.separator);
		File f = new File(path);
		if(f.exists() && f.isFile())
			return f.delete();
		return false;
	}

	public InputStream read(HttpContext ctx, String imgURL) throws IOException {
		String uploadPath = this.getUploadPath(ctx);
		String baseURI = this.getPhotoBaseURI(ctx);
		String path = uploadPath
				+ StringUtils.replace(imgURL.substring(baseURI.length()), "/",
						File.separator);
		File f = new File(path);
		if(f.exists() && f.isFile())
			return new FileInputStream(f);
		return null;
	}

	public OutputStream write(HttpContext ctx, String imgURL) throws IOException {
		String uploadPath = this.getUploadPath(ctx);
		String baseURI = this.getPhotoBaseURI(ctx);
		String path = uploadPath
				+ StringUtils.replace(imgURL.substring(baseURI.length()), "/",
						File.separator);
		File f = new File(path);
		if(f.exists() && f.isFile())
			return new FileOutputStream(f, false);
		return null;
	}

	/**
	 * 生成一個用于存儲圖像的文件并返回其URI地址
	 * @param ctx
	 * @param ext	例如: .gif
	 * @return 
	 * @throws IOException
	 */
	private String[] createNewPhotoURI(HttpContext ctx, String ext) throws IOException{
		Calendar cal = Calendar.getInstance();
		StringBuffer dir = new StringBuffer();
		dir.append(getUploadPath(ctx));
		dir.append(cal.get(Calendar.YEAR));
		dir.append(File.separator);
		dir.append(cal.get(Calendar.MONTH)+1);
		dir.append(File.separator);
		dir.append(cal.get(Calendar.DATE));
		dir.append(File.separator);
		File file = new File(dir.toString());
		if(!file.exists()){
			//如果目錄不存在則創建目錄
			synchronized(FileSystemSaver.class){
				if(!file.mkdirs())
					return null;
			}
		}
		file = null;
		int times = 0;
		//生成獨一無二的文件名
		do{
			String fn = String.valueOf(System.currentTimeMillis()) + '.' + ext;
			StringBuffer fn_preview = new StringBuffer();
			fn_preview.append(System.currentTimeMillis());
			fn_preview.append("_s.");
			fn_preview.append(ext);
			File f = new File(dir + fn);
			File f_preview = new File(dir + fn_preview.toString());
			if(!f.exists() && !f_preview.exists()){
				try{
					if(f.createNewFile())
						return new String[]{dir + fn, dir + fn_preview.toString()};
				}catch(SecurityException e){
				}catch(IOException e){					
				}finally{
					f = null;
					f_preview = null;
				}
			}
			times ++;
		}while(times < 10);
		
		return null;
	}

	/**
	 * 返回保存圖像的物理路徑
	 * @param ctx
	 * @return
	 */
	private String getUploadPath(HttpContext ctx){
		if(upload_path != null)
			return upload_path;
		
		String dir = ctx.getServlet().getInitParameter(KEY_PHOTO_SAVE_PATH);
		if(dir.startsWith(Globals.LOCAL_PATH_PREFIX))
			upload_path = dir.substring(Globals.LOCAL_PATH_PREFIX.length());		
		else if(dir.startsWith("/"))
			upload_path = ctx.getApplication().getRealPath(dir);
		else
			upload_path = dir;
		if(!upload_path.endsWith(File.separator))
			upload_path += File.separator;
		
		return upload_path;
	}
	
	/**
	 * 返回圖像對應的BaseURL
	 * @param ctx
	 * @return
	 */
	private String getPhotoBaseURI(HttpContext ctx){
		if(upload_uri != null)
			return upload_uri;
		upload_uri = ctx.getServlet().getInitParameter(KEY_PHOTO_SAVE_URI);
		if(!upload_uri.endsWith("/"))
			upload_uri += '/';
		return upload_uri;
	}
	
	private String upload_path = null;
	private String upload_uri = null;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情一区二区| 久久精品日韩一区二区三区| 4438成人网| 欧美成人vps| 国产精品久久99| 亚洲成av人影院| 国内精品国产成人国产三级粉色 | 欧洲一区二区三区免费视频| 欧美日韩国产免费一区二区| 欧美成人综合网站| 一区免费观看视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品白丝av| 欧美日韩美女一区二区| 久久久久久久久久久久久久久99 | 欧美制服丝袜第一页| 精品国产露脸精彩对白| 亚洲卡通欧美制服中文| 久久国产精品色婷婷| 99热99精品| 精品日本一线二线三线不卡| 亚洲摸摸操操av| 麻豆91精品91久久久的内涵| 色妹子一区二区| 久久一区二区三区四区| 亚洲午夜精品网| 成人午夜视频在线观看| 777午夜精品视频在线播放| 国产成人夜色高潮福利影视| 欧美日韩在线直播| 婷婷亚洲久悠悠色悠在线播放 | 国产精品久久久一本精品| 日韩激情一区二区| 色就色 综合激情| 国产亚洲精品福利| 久久精品99国产精品| 在线国产电影不卡| 国产亚洲1区2区3区| 免费在线观看精品| 在线免费精品视频| 亚洲欧洲精品一区二区精品久久久 | 成人av在线资源网站| 日韩欧美亚洲一区二区| 亚洲一区二区五区| 91在线精品一区二区| 久久久青草青青国产亚洲免观| 日韩电影免费在线看| 欧美在线播放高清精品| 国产精品不卡一区| 国产成人精品免费在线| 精品久久久久久久久久久院品网| 亚洲一二三四在线| 色伊人久久综合中文字幕| 国产精品私房写真福利视频| 国产在线乱码一区二区三区| 91精品国产综合久久香蕉麻豆 | 欧美一区三区二区| 亚洲国产一区二区三区| 色呦呦日韩精品| 亚洲色图视频网站| av电影在线观看一区| 国产精品视频第一区| 国产精品一区在线观看乱码| 精品国产一区二区在线观看| 久久精品国产在热久久| 91精品在线麻豆| 免播放器亚洲一区| 日韩一级在线观看| 蜜臀99久久精品久久久久久软件| 欧美一区二区黄| 色婷婷综合五月| 亚洲欧美在线另类| 97久久精品人人做人人爽50路 | 在线日韩av片| 亚洲综合色网站| 欧美性色欧美a在线播放| 亚洲最快最全在线视频| 欧美午夜片在线看| 亚洲18影院在线观看| 欧美精选午夜久久久乱码6080| 亚洲妇女屁股眼交7| 欧美精品黑人性xxxx| 欧美aaa在线| 26uuu色噜噜精品一区二区| 国产在线播放一区三区四| 国产午夜久久久久| www.欧美日韩| 亚洲一区免费视频| 欧美一区二区三区公司| 精品一区二区日韩| 亚洲国产精品高清| 色综合中文字幕国产 | 欧美日韩一区在线| 免费看精品久久片| 国产亚洲女人久久久久毛片| 不卡一区在线观看| 夜夜嗨av一区二区三区中文字幕| 欧美日韩一级黄| 久久成人精品无人区| 欧美激情一区二区在线| 欧美亚洲禁片免费| 激情深爱一区二区| 中文字幕一区二区5566日韩| 欧美亚洲动漫精品| 国内偷窥港台综合视频在线播放| 一区二区中文视频| 日韩限制级电影在线观看| 国产成人午夜精品影院观看视频| 亚洲三级免费观看| 制服丝袜激情欧洲亚洲| 国产成人午夜精品影院观看视频 | 欧美色窝79yyyycom| 免费精品视频在线| 国产精品日日摸夜夜摸av| 欧美色图12p| 国产成人综合网站| 亚洲一区二区不卡免费| 精品国产免费一区二区三区四区| www.性欧美| 免费视频一区二区| 亚洲男同1069视频| 亚洲精品一区二区三区在线观看| av在线不卡免费看| 奇米影视一区二区三区| 18成人在线观看| 欧美成人在线直播| 欧美午夜精品免费| 国产成人午夜片在线观看高清观看| 亚洲国产精品久久久男人的天堂 | 97精品久久久午夜一区二区三区| 婷婷丁香激情综合| 国产精品丝袜一区| 日韩一区二区免费在线观看| 91香蕉视频污在线| 狠狠色综合色综合网络| 亚洲观看高清完整版在线观看| 久久色成人在线| 欧美精品1区2区3区| 99re6这里只有精品视频在线观看| 美国三级日本三级久久99| 亚洲免费av网站| 国产日韩欧美一区二区三区乱码| 欧美男女性生活在线直播观看| www.亚洲色图| 国产激情一区二区三区| 男女视频一区二区| 亚洲电影你懂得| 一区二区三区四区激情| 欧美国产1区2区| 精品动漫一区二区三区在线观看| 欧美日韩在线播| 色婷婷综合久久| zzijzzij亚洲日本少妇熟睡| 国产一区二区三区视频在线播放| 日日夜夜精品视频免费| 亚洲精品国产视频| 国产精品久久久久久久久晋中| 精品国产sm最大网站| 91精品国产综合久久福利软件| 欧美视频完全免费看| 91电影在线观看| 色综合中文字幕| 亚洲午夜一区二区| 精品国产不卡一区二区三区| 制服丝袜中文字幕一区| 欧美色图激情小说| 欧美少妇一区二区| 日本韩国视频一区二区| 99久久精品免费看| 成人黄色小视频在线观看| 国产a级毛片一区| 国产精品1区二区.| 国产福利91精品| 国产伦精品一区二区三区免费迷 | 久久综合久久综合久久| 日韩午夜电影在线观看| 欧美一区二区免费视频| 欧美一区二区三区公司| 日韩欧美国产高清| 日韩一区二区三区电影在线观看| 日韩一级免费一区| 日韩视频免费直播| 欧美成人三级电影在线| 精品国产乱码久久久久久1区2区| 精品国产乱码久久久久久免费 | 成人性色生活片| 不卡的av在线| 色网综合在线观看| 色8久久精品久久久久久蜜| 在线视频你懂得一区| 欧美区视频在线观看| 日韩欧美激情四射| 精品美女一区二区三区| 久久女同精品一区二区| 欧美激情一区二区在线| 综合久久一区二区三区| 一区二区三区国产精品| 午夜精品123| 狠狠色狠狠色综合| 成人高清视频在线观看|