/*
|
* 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();
|
}
|
}
|
|
}
|