文件服务器

图片服务器是为了减轻应用服务器的压力,对于电商很重要,并且可以实时读出尺寸的图片


1.控制图片的IO读和写

@Controller
@RequestMapping("/fs/file")
public class FileController extends SpringController {
	
	@Autowired
	private BaseService baseService;
	
	/**
	 * Springmvc图片上传,MultipartFile
	 * 2015-8-3下午4:33:13
	 * @param file
	 */
	@RequestMapping("/upload")
	@ResponseBody
	public String upload(MultipartFile file) {
		String fileServerName = "";
		if (file != null) {
			fileServerName = baseService.uploadFile(file,BaseConstant.SAVE_TYPE_FILE);	
		}
		return fileServerName;
	}
	
	/**
	 * 根据路径名称获取
	 * 2015-8-3下午5:34:25
	 * @param fileServerName
	 * @return
	 */
	@RequestMapping("/showFile")
	@ResponseBody
	public void showFile(String fileName) {
		if (StringUtils.isNotEmpty(fileName)) {
			if(StringUtils.contains(fileName, "_")) {				
				String savePath = PropertyUtil.getPropertyValue(BaseConstant.CONFIG_PROPERTY_PATH, BaseConstant.FILE_SAVA_DISK)+fileName.split("_")[1];
				String desPath = GMagickUtil.reduceFile(fileName.split("_")[0], savePath);
				File file =new File(desPath);
				FileUtil.renderFileToClient(file, BaseConstant.CONTENTTYPE_IMAGE);
				file.delete();
			}else{
				String savePath = PropertyUtil.getPropertyValue(BaseConstant.CONFIG_PROPERTY_PATH, BaseConstant.FILE_SAVA_DISK)+fileName;
				FileUtil.renderFileToClient(new File(savePath), BaseConstant.CONTENTTYPE_IMAGE);
			}
		}
	}
	
}

2.图片的service

/**
	 * io保存上传的文件
	 * 2015-8-6上午8:23:33
	 * @param file
	 * @param saveType
	 * @return
	 */
	public String uploadFile(MultipartFile file, String saveType){
		String fileServerName = "";
		Properties property = PropertyUtil.getProperty(BaseConstant.CONFIG_PROPERTY_PATH);
		
		String savePath = "";
		if(BaseConstant.SAVE_TYPE_UEDITOR.equals(saveType)) {
			savePath = property.getProperty(BaseConstant.UEDITOR_SAVA_PATH) + FileUtil.getRelativePath();
		}else {
			savePath = property.getProperty(BaseConstant.FILE_SAVA_PATH) + FileUtil.getRelativePath();
		}
		
		File dir = new File(property.getProperty(BaseConstant.FILE_SAVA_DISK) + savePath);
		
		if (!dir.exists()) {
			dir.mkdirs();
		}
		//获取文件的路径名称,统一以jpg的格式进行保存
		String newFileName = UUID.getUUID() + "." + FilenameUtils.getExtension(file.getOriginalFilename());
		
		File newFile = new File(dir + "/" +newFileName);
		try{
			file.transferTo(newFile);
			fileServerName = savePath + newFileName;
		} catch (IOException e) {
			e.printStackTrace();
		}	
		
		return fileServerName;
	}


3.压缩GraphicsMagick工具

public class GMagickUtil {
	
	/**
	 * 根据不同的需求生成不同的尺寸
	 * 2015-8-4上午9:41:01
	 * @param fileType
	 * @param savePath
	 * 
	 */
	public static String reduceFile(String fileType, String srcPath) {
		String desPath = FileUtil.getTempDir() + UUID.getUUID() + BaseConstant.FILE_EXTENSION;
		try {
			IMOperation operation = new IMOperation();
			operation.addImage(srcPath);
			operation.addRawArgs("-quality", BaseConstant.REDUCE_PERCENT);  
			
			if(StringUtil.containsKey(BaseConstant.THUMB_VALUE, fileType)){
				String[] strs = fileType.split("x");
				operation.resize(Integer.valueOf(strs[0]), Integer.valueOf(strs[1]), '!');
			}
			operation.addImage(desPath);
			//ConvertCmd false使用ImageMagic,true使用GraphicsMagick  
			ConvertCmd cmd = new ConvertCmd(true);			
			cmd.run(operation);
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		return desPath;
	}
	
	/**
	 * 取图片中心,按尺寸获取
	 * 2015-8-4上午9:41:40
	 * @param srcPath
	 * @param desPath
	 * @param rectw
	 * @param recth
	 *
	 */
	public static void cropImageCenter(String srcPath, String desPath, int rectw, int recth) {  
		IMOperation operation = new IMOperation();  
		operation.addImage(srcPath);  
		operation.resize(rectw, recth, '^').gravity("center").extent(rectw, recth);  
		operation.addImage(desPath);  
        ConvertCmd convert = new ConvertCmd(true);  
        try {
			convert.run(operation);
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
	
}

4.一些常量

public class BaseConstant {
	
	/**配置文件路径*/
	public static final String CONFIG_PROPERTY_PATH = "/conf/file.properties";
	
	/**文件服务器名称*/
	public static final String FILE_SERVER_NAME = "file.servername";
	/**文件保存的盘符*/
	public static final String FILE_SAVA_DISK = "file.disk";
	/**文件保存路径名称*/
	public static final String FILE_SAVA_PATH = "file.savepath";
	/**百度编辑器路径名称*/
	public static final String UEDITOR_SAVA_PATH = "ueditor.savepath";
	
	/**保存类型*/
	public static final String SAVE_TYPE_FILE = "file";
	public static final String SAVE_TYPE_UEDITOR = "ueditor";
	
	/**压缩允许值*/
	public static final String[] THUMB_VALUE = new String[]{"80x80", "100x100", "120x120", "150x150", "200x200", "250x250"};
	
	/**图片压缩比例*/
	public static final String REDUCE_PERCENT = "60";
	
	/**压缩图片格式*/
	public static final String FILE_EXTENSION = ".jpg";
	
	/**图片输出流*/
	public static final String CONTENTTYPE_IMAGE = "image/jpeg";




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值