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 {
|
||||
|
||||
/**
|
||||
* 默认存储的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
|
||||
* <p>
|
||||
|
|
|
@ -109,4 +109,9 @@ public class SysFileInfoResponse {
|
|||
*/
|
||||
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.exception.FileException;
|
||||
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.modular.entity.SysFileInfo;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
|
@ -43,7 +44,6 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
import java.io.IOException;
|
||||
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;
|
||||
|
||||
/**
|
||||
|
@ -80,7 +80,7 @@ public class FileInfoFactory {
|
|||
String finalFileName = fileId + FILE_POSTFIX_SEPARATOR + fileSuffix;
|
||||
|
||||
// 桶名
|
||||
String fileBucket = DEFAULT_BUCKET_NAME;
|
||||
String fileBucket = FileConfigExpander.getDefaultBucket();
|
||||
|
||||
// 存储文件
|
||||
byte[] bytes;
|
||||
|
|
|
@ -76,7 +76,6 @@ import java.util.stream.Collectors;
|
|||
import java.util.zip.ZipEntry;
|
||||
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.exception.enums.FileExceptionEnum.FILE_NOT_FOUND;
|
||||
|
||||
|
@ -104,7 +103,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
|||
// 获取文件字节码
|
||||
byte[] fileBytes;
|
||||
try {
|
||||
fileBytes = fileOperatorApi.getFileBytes(DEFAULT_BUCKET_NAME, sysFileInfo.getFileObjectName());
|
||||
fileBytes = fileOperatorApi.getFileBytes(FileConfigExpander.getDefaultBucket(), sysFileInfo.getFileObjectName());
|
||||
} catch (Exception e) {
|
||||
log.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();
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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<SysFileInfoResponse> fileInfoResponseList = this.getFileInfoListByFileIds(fileIdList);
|
||||
|
||||
// 获取bucket名称
|
||||
String bucketName = FileConfigExpander.getDefaultBucket();
|
||||
if (ObjectUtil.isNotEmpty(fileInfoResponseList)) {
|
||||
bucketName = fileInfoResponseList.get(0).getFileBucket();
|
||||
}
|
||||
|
||||
// 输出流等信息
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
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);
|
||||
}
|
||||
|
||||
byte[] fileBytes = fileOperatorApi.getFileBytes(DEFAULT_BUCKET_NAME, sysFileInfoResponse.getFileObjectName());
|
||||
byte[] fileBytes = fileOperatorApi.getFileBytes(bucketName, sysFileInfoResponse.getFileObjectName());
|
||||
ZipEntry entry = new ZipEntry(i + 1 + "." + fileOriginName);
|
||||
entry.setSize(fileBytes.length);
|
||||
zip.putNextEntry(entry);
|
||||
|
|
|
@ -25,11 +25,11 @@
|
|||
package cn.stylefeng.roses.kernel.file.aliyun;
|
||||
|
||||
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.enums.BucketAuthEnum;
|
||||
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.expander.FileConfigExpander;
|
||||
import cn.stylefeng.roses.kernel.file.api.pojo.props.AliyunOssProperties;
|
||||
import com.aliyun.oss.ClientException;
|
||||
import com.aliyun.oss.OSS;
|
||||
|
@ -200,7 +200,8 @@ public class AliyunFileOperator implements FileOperatorApi {
|
|||
|
||||
@Override
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue