xiejun
2024-11-01 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a
Source/BladeX-Tool/blade-core-boot/src/main/java/org/springblade/core/boot/file/LocalFileProxyFactory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill åº„骞 (smallchill@163.com)
 */
package org.springblade.core.boot.file;
import org.springblade.core.boot.props.BladeFileProperties;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.ImageUtil;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.core.tool.utils.StringPool;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
 * æ–‡ä»¶ä»£ç†ç±»
 *
 * @author Chill
 */
public class LocalFileProxyFactory implements IFileProxy {
   /**
    * æ–‡ä»¶é…ç½®
    */
   private static BladeFileProperties fileProperties;
   private static BladeFileProperties getBladeFileProperties() {
      if (fileProperties == null) {
         fileProperties = SpringUtil.getBean(BladeFileProperties.class);
      }
      return fileProperties;
   }
   @Override
   public File rename(File f, String path) {
      File dest = new File(path);
      f.renameTo(dest);
      return dest;
   }
   @Override
   public String[] path(File f, String dir) {
      //避免网络延迟导致时间不同步
      long time = System.nanoTime();
      StringBuilder uploadPath = new StringBuilder()
         .append(getFileDir(dir, getBladeFileProperties().getUploadRealPath()))
         .append(time)
         .append(getFileExt(f.getName()));
      StringBuilder virtualPath = new StringBuilder()
         .append(getFileDir(dir, getBladeFileProperties().getUploadCtxPath()))
         .append(time)
         .append(getFileExt(f.getName()));
      return new String[]{BladeFileUtil.formatUrl(uploadPath.toString()), BladeFileUtil.formatUrl(virtualPath.toString())};
   }
   /**
    * èŽ·å–æ–‡ä»¶åŽç¼€
    *
    * @param fileName æ–‡ä»¶å
    * @return æ–‡ä»¶åŽç¼€
    */
   public static String getFileExt(String fileName) {
      if (!fileName.contains(StringPool.DOT)) {
         return ".jpg";
      } else {
         return fileName.substring(fileName.lastIndexOf(StringPool.DOT));
      }
   }
   /**
    * èŽ·å–æ–‡ä»¶ä¿å­˜åœ°å€
    *
    * @param dir     ç›®å½•
    * @param saveDir ä¿å­˜ç›®å½•
    * @return åœ°å€
    */
   public static String getFileDir(String dir, String saveDir) {
      StringBuilder newFileDir = new StringBuilder();
      newFileDir.append(saveDir)
         .append(File.separator).append(dir).append(File.separator).append(DateUtil.format(DateUtil.now(), "yyyyMMdd"))
         .append(File.separator);
      return newFileDir.toString();
   }
   /**
    * å›¾ç‰‡åŽ‹ç¼©
    *
    * @param path æ–‡ä»¶åœ°å€
    */
   @Override
   public void compress(String path) {
      try {
         ImageUtil.zoomScale(ImageUtil.readImage(path), new FileOutputStream(new File(path)), null, getBladeFileProperties().getCompressScale(), getBladeFileProperties().getCompressFlag());
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      }
   }
}