xiejun
2024-11-01 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a
Source/BladeX-Tool/blade-core-boot/src/main/java/org/springblade/core/boot/file/LocalFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,157 @@
/*
 *      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 com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.springblade.core.boot.props.BladeFileProperties;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.SpringUtil;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
/**
 * ä¸Šä¼ æ–‡ä»¶å°è£…
 *
 * @author Chill
 */
@Data
public class LocalFile {
   /**
    * ä¸Šä¼ æ–‡ä»¶åœ¨é™„件表中的id
    */
   private Object fileId;
   /**
    * ä¸Šä¼ æ–‡ä»¶
    */
   @JsonIgnore
   private MultipartFile file;
   /**
    * æ–‡ä»¶å¤–网地址
    */
   private String domain;
   /**
    * ä¸Šä¼ åˆ†ç±»æ–‡ä»¶å¤¹
    */
   private String dir;
   /**
    * ä¸Šä¼ ç‰©ç†è·¯å¾„
    */
   private String uploadPath;
   /**
    * ä¸Šä¼ è™šæ‹Ÿè·¯å¾„
    */
   private String uploadVirtualPath;
   /**
    * æ–‡ä»¶å
    */
   private String fileName;
   /**
    * çœŸå®žæ–‡ä»¶å
    */
   private String originalFileName;
   /**
    * æ–‡ä»¶é…ç½®
    */
   private static BladeFileProperties fileProperties;
   private static BladeFileProperties getBladeFileProperties() {
      if (fileProperties == null) {
         fileProperties = SpringUtil.getBean(BladeFileProperties.class);
      }
      return fileProperties;
   }
   public LocalFile(MultipartFile file, String dir) {
      this.dir = dir;
      this.file = file;
      this.fileName = file.getName();
      this.originalFileName = file.getOriginalFilename();
      this.domain = getBladeFileProperties().getUploadDomain();
      this.uploadPath = BladeFileUtil.formatUrl(File.separator + getBladeFileProperties().getUploadRealPath() + File.separator + dir + File.separator + DateUtil.format(DateUtil.now(), "yyyyMMdd") + File.separator + this.originalFileName);
      this.uploadVirtualPath = BladeFileUtil.formatUrl(getBladeFileProperties().getUploadCtxPath().replace(getBladeFileProperties().getContextPath(), "") + File.separator + dir + File.separator + DateUtil.format(DateUtil.now(), "yyyyMMdd") + File.separator + this.originalFileName);
   }
   public LocalFile(MultipartFile file, String dir, String uploadPath, String uploadVirtualPath) {
      this(file, dir);
      if (null != uploadPath) {
         this.uploadPath = BladeFileUtil.formatUrl(uploadPath);
         this.uploadVirtualPath = BladeFileUtil.formatUrl(uploadVirtualPath);
      }
   }
   /**
    * å›¾ç‰‡ä¸Šä¼ 
    */
   public void transfer() {
      transfer(getBladeFileProperties().getCompress());
   }
   /**
    * å›¾ç‰‡ä¸Šä¼ 
    *
    * @param compress æ˜¯å¦åŽ‹ç¼©
    */
   public void transfer(boolean compress) {
      IFileProxy fileFactory = FileProxyManager.me().getDefaultFileProxyFactory();
      this.transfer(fileFactory, compress);
   }
   /**
    * å›¾ç‰‡ä¸Šä¼ 
    *
    * @param fileFactory æ–‡ä»¶ä¸Šä¼ å·¥åŽ‚ç±»
    * @param compress    æ˜¯å¦åŽ‹ç¼©
    */
   public void transfer(IFileProxy fileFactory, boolean compress) {
      try {
         File file = new File(uploadPath);
         if (null != fileFactory) {
            String[] path = fileFactory.path(file, dir);
            this.uploadPath = path[0];
            this.uploadVirtualPath = path[1];
            file = fileFactory.rename(file, path[0]);
         }
         File pfile = file.getParentFile();
         if (!pfile.exists()) {
            pfile.mkdirs();
         }
         this.file.transferTo(file);
         if (compress) {
            fileFactory.compress(this.uploadPath);
         }
      } catch (IllegalStateException | IOException e) {
         e.printStackTrace();
      }
   }
}