mirror of https://gitee.com/stylefeng/roses
【7.0.4】【file】文件上传返回前段的参数增加url
parent
3df9df4ada
commit
b0591ca19c
|
@ -37,6 +37,16 @@ import cn.stylefeng.roses.kernel.file.api.pojo.props.LocalFileProperties;
|
||||||
*/
|
*/
|
||||||
public class FileConfigExpander {
|
public class FileConfigExpander {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认存储的bucket名称
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2021/6/15 21:54
|
||||||
|
*/
|
||||||
|
public static String getDefaultBucket() {
|
||||||
|
return ConfigContext.me().getSysConfigValueWithDefault("SYS_FILE_DEFAULT_BUCKET", String.class, FileConstants.DEFAULT_BUCKET_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取服务部署的机器host,例如http://localhost
|
* 获取服务部署的机器host,例如http://localhost
|
||||||
* <p>
|
* <p>
|
||||||
|
|
|
@ -109,4 +109,9 @@ public class SysFileInfoResponse {
|
||||||
*/
|
*/
|
||||||
private String filePath;
|
private String filePath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件访问的路径,如果是私密文件,则返回带鉴权的url,如果不是私密文件,则返回公网能直接访问的url
|
||||||
|
*/
|
||||||
|
private String fileUrl;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ import cn.stylefeng.roses.kernel.file.api.enums.FileLocationEnum;
|
||||||
import cn.stylefeng.roses.kernel.file.api.enums.FileStatusEnum;
|
import cn.stylefeng.roses.kernel.file.api.enums.FileStatusEnum;
|
||||||
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
|
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
|
||||||
import cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum;
|
import cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.file.api.expander.FileConfigExpander;
|
||||||
import cn.stylefeng.roses.kernel.file.api.pojo.request.SysFileInfoRequest;
|
import cn.stylefeng.roses.kernel.file.api.pojo.request.SysFileInfoRequest;
|
||||||
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileInfo;
|
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileInfo;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
|
@ -43,7 +44,6 @@ import org.springframework.web.multipart.MultipartFile;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.DEFAULT_BUCKET_NAME;
|
|
||||||
import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.FILE_POSTFIX_SEPARATOR;
|
import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.FILE_POSTFIX_SEPARATOR;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -80,7 +80,7 @@ public class FileInfoFactory {
|
||||||
String finalFileName = fileId + FILE_POSTFIX_SEPARATOR + fileSuffix;
|
String finalFileName = fileId + FILE_POSTFIX_SEPARATOR + fileSuffix;
|
||||||
|
|
||||||
// 桶名
|
// 桶名
|
||||||
String fileBucket = DEFAULT_BUCKET_NAME;
|
String fileBucket = FileConfigExpander.getDefaultBucket();
|
||||||
|
|
||||||
// 存储文件
|
// 存储文件
|
||||||
byte[] bytes;
|
byte[] bytes;
|
||||||
|
|
|
@ -76,7 +76,6 @@ import java.util.stream.Collectors;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.DEFAULT_BUCKET_NAME;
|
|
||||||
import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.FILE_POSTFIX_SEPARATOR;
|
import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.FILE_POSTFIX_SEPARATOR;
|
||||||
import static cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum.FILE_NOT_FOUND;
|
import static cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum.FILE_NOT_FOUND;
|
||||||
|
|
||||||
|
@ -104,7 +103,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
// 获取文件字节码
|
// 获取文件字节码
|
||||||
byte[] fileBytes;
|
byte[] fileBytes;
|
||||||
try {
|
try {
|
||||||
fileBytes = fileOperatorApi.getFileBytes(DEFAULT_BUCKET_NAME, sysFileInfo.getFileObjectName());
|
fileBytes = fileOperatorApi.getFileBytes(FileConfigExpander.getDefaultBucket(), sysFileInfo.getFileObjectName());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("获取文件流异常,具体信息为:{}", e.getMessage());
|
log.error("获取文件流异常,具体信息为:{}", e.getMessage());
|
||||||
throw new FileException(FileExceptionEnum.FILE_STREAM_ERROR, e.getMessage());
|
throw new FileException(FileExceptionEnum.FILE_STREAM_ERROR, e.getMessage());
|
||||||
|
@ -137,6 +136,16 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
// 返回文件信息体
|
// 返回文件信息体
|
||||||
SysFileInfoResponse fileUploadInfoResult = new SysFileInfoResponse();
|
SysFileInfoResponse fileUploadInfoResult = new SysFileInfoResponse();
|
||||||
BeanUtil.copyProperties(sysFileInfo, fileUploadInfoResult);
|
BeanUtil.copyProperties(sysFileInfo, fileUploadInfoResult);
|
||||||
|
|
||||||
|
// 拼接文件可直接访问的url
|
||||||
|
String fileAuthUrl;
|
||||||
|
if (YesOrNotEnum.Y.getCode().equals(sysFileInfoRequest.getSecretFlag())) {
|
||||||
|
fileAuthUrl = fileOperatorApi.getFileAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000);
|
||||||
|
} else {
|
||||||
|
fileAuthUrl = fileOperatorApi.getFileUnAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName());
|
||||||
|
}
|
||||||
|
fileUploadInfoResult.setFileUrl(fileAuthUrl);
|
||||||
|
|
||||||
return fileUploadInfoResult;
|
return fileUploadInfoResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,6 +231,12 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
List<Long> fileIdList = Arrays.stream(fileIds.split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
|
List<Long> fileIdList = Arrays.stream(fileIds.split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
|
||||||
List<SysFileInfoResponse> fileInfoResponseList = this.getFileInfoListByFileIds(fileIdList);
|
List<SysFileInfoResponse> fileInfoResponseList = this.getFileInfoListByFileIds(fileIdList);
|
||||||
|
|
||||||
|
// 获取bucket名称
|
||||||
|
String bucketName = FileConfigExpander.getDefaultBucket();
|
||||||
|
if (ObjectUtil.isNotEmpty(fileInfoResponseList)) {
|
||||||
|
bucketName = fileInfoResponseList.get(0).getFileBucket();
|
||||||
|
}
|
||||||
|
|
||||||
// 输出流等信息
|
// 输出流等信息
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
ZipOutputStream zip = new ZipOutputStream(bos);
|
ZipOutputStream zip = new ZipOutputStream(bos);
|
||||||
|
@ -236,7 +251,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
throw new FileException(FileExceptionEnum.SECRET_FLAG_INFO_ERROR, fileOriginName);
|
throw new FileException(FileExceptionEnum.SECRET_FLAG_INFO_ERROR, fileOriginName);
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] fileBytes = fileOperatorApi.getFileBytes(DEFAULT_BUCKET_NAME, sysFileInfoResponse.getFileObjectName());
|
byte[] fileBytes = fileOperatorApi.getFileBytes(bucketName, sysFileInfoResponse.getFileObjectName());
|
||||||
ZipEntry entry = new ZipEntry(i + 1 + "." + fileOriginName);
|
ZipEntry entry = new ZipEntry(i + 1 + "." + fileOriginName);
|
||||||
entry.setSize(fileBytes.length);
|
entry.setSize(fileBytes.length);
|
||||||
zip.putNextEntry(entry);
|
zip.putNextEntry(entry);
|
||||||
|
|
|
@ -25,11 +25,11 @@
|
||||||
package cn.stylefeng.roses.kernel.file.aliyun;
|
package cn.stylefeng.roses.kernel.file.aliyun;
|
||||||
|
|
||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.stylefeng.roses.kernel.file.api.FileOperatorApi;
|
import cn.stylefeng.roses.kernel.file.api.FileOperatorApi;
|
||||||
import cn.stylefeng.roses.kernel.file.api.enums.BucketAuthEnum;
|
import cn.stylefeng.roses.kernel.file.api.enums.BucketAuthEnum;
|
||||||
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
|
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
|
||||||
import cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum;
|
import cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum;
|
||||||
import cn.stylefeng.roses.kernel.file.api.expander.FileConfigExpander;
|
|
||||||
import cn.stylefeng.roses.kernel.file.api.pojo.props.AliyunOssProperties;
|
import cn.stylefeng.roses.kernel.file.api.pojo.props.AliyunOssProperties;
|
||||||
import com.aliyun.oss.ClientException;
|
import com.aliyun.oss.ClientException;
|
||||||
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSS;
|
||||||
|
@ -200,7 +200,8 @@ public class AliyunFileOperator implements FileOperatorApi {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getFileUnAuthUrl(String bucketName, String key) {
|
public String getFileUnAuthUrl(String bucketName, String key) {
|
||||||
return this.getFileAuthUrl(bucketName, key, FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000);
|
String template = "https://{}.oss-cn-beijing.aliyuncs.com/{}";
|
||||||
|
return StrUtil.format(template,bucketName,key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue