文件服务器

来源:互联网 发布:什么软件可以泡妞 编辑:程序博客网 时间:2024/05/20 20:22

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


1.控制图片的IO读和写

@Controller@RequestMapping("/fs/file")public class FileController extends SpringController {@Autowiredprivate BaseService baseService;/** * Springmvc图片上传,MultipartFile * 2015-8-3下午4:33:13 * @param file */@RequestMapping("/upload")@ResponseBodypublic 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")@ResponseBodypublic 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";




0 0