|
|
@ -1,7 +1,10 @@ |
|
|
|
package com.model2d3d.viewer.back.service.impl; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.model2d3d.viewer.back.common.response.ResponseCode; |
|
|
|
import com.model2d3d.viewer.back.dto.api.ObjectKey; |
|
|
|
import com.model2d3d.viewer.back.model.BasicCompany; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
@ -12,6 +15,19 @@ import com.model2d3d.viewer.back.common.response.SimpleDataResponse; |
|
|
|
import com.model2d3d.viewer.back.dao.ex.BasicCompanyMapperExt; |
|
|
|
import com.model2d3d.viewer.back.service.CommonService; |
|
|
|
import com.model2d3d.viewer.back.service.common.CommonOpt; |
|
|
|
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; |
|
|
|
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; |
|
|
|
import software.amazon.awssdk.regions.Region; |
|
|
|
import software.amazon.awssdk.services.s3.S3Client; |
|
|
|
import software.amazon.awssdk.services.s3.model.HeadObjectRequest; |
|
|
|
import software.amazon.awssdk.services.s3.model.HeadObjectResponse; |
|
|
|
import software.amazon.awssdk.services.s3.model.NoSuchKeyException; |
|
|
|
import software.amazon.awssdk.services.s3.presigner.S3Presigner; |
|
|
|
import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest; |
|
|
|
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest; |
|
|
|
|
|
|
|
import java.net.URL; |
|
|
|
import java.time.Duration; |
|
|
|
|
|
|
|
/** |
|
|
|
* |
|
|
@ -21,14 +37,16 @@ import com.model2d3d.viewer.back.service.common.CommonOpt; |
|
|
|
@Service |
|
|
|
public class CommonServiceImpl implements CommonService { |
|
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(CommonServiceImpl.class); |
|
|
|
private static final Logger logger = LoggerFactory.getLogger(CommonServiceImpl.class); |
|
|
|
|
|
|
|
@Value("${amazon.aws.accesskey}") |
|
|
|
private String awsAccessKeyId; |
|
|
|
|
|
|
|
@Value("${amazon.aws.secretkey}") |
|
|
|
private String awsAccessSecret; |
|
|
|
|
|
|
|
@Value("${spring.datasource.url}") |
|
|
|
private String dbUrl; |
|
|
|
@Value("${spring.datasource.username}") |
|
|
|
private String dbUsername; |
|
|
|
@Value("${spring.datasource.password}") |
|
|
|
private String dbPassword; |
|
|
|
@Value("${amazon.aws.bucket.image:}") |
|
|
|
private String awsBucketAdress; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private CommonOpt commonOpt; |
|
|
@ -57,4 +75,69 @@ public class CommonServiceImpl implements CommonService { |
|
|
|
} |
|
|
|
return resp; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public SimpleDataResponse getTemporaryLink(ObjectKey objectKey, Long apikey, Integer languageType) { |
|
|
|
|
|
|
|
String bucketName = awsBucketAdress; |
|
|
|
String accessKey = awsAccessKeyId; |
|
|
|
String secretKey = awsAccessSecret; |
|
|
|
String objKey = objectKey.getObjectKey(); // 文件名
|
|
|
|
|
|
|
|
URL url = null; |
|
|
|
S3Presigner presigner = null; |
|
|
|
try { |
|
|
|
AwsBasicCredentials awsCredentials = AwsBasicCredentials.create(accessKey, secretKey); |
|
|
|
|
|
|
|
// Try to get the object metadata
|
|
|
|
HeadObjectRequest headObjectRequest = HeadObjectRequest.builder() |
|
|
|
.bucket(bucketName) |
|
|
|
.key(objKey) |
|
|
|
.build(); |
|
|
|
// First, check if the object exists in the S3 bucket
|
|
|
|
S3Client s3Client = S3Client.builder() |
|
|
|
.region(Region.AP_NORTHEAST_1) |
|
|
|
.credentialsProvider(StaticCredentialsProvider.create(awsCredentials)) |
|
|
|
.build(); |
|
|
|
HeadObjectResponse headObjectResponse = s3Client.headObject(headObjectRequest); |
|
|
|
if (headObjectResponse != null) { |
|
|
|
|
|
|
|
// Generate a presigned URL using S3Prestige
|
|
|
|
presigner = S3Presigner.builder() |
|
|
|
.region(Region.AP_NORTHEAST_1) |
|
|
|
.credentialsProvider(StaticCredentialsProvider.create(awsCredentials)) |
|
|
|
.build(); |
|
|
|
// expiration time (e.g. 12 hour)
|
|
|
|
software.amazon.awssdk.services.s3.model.GetObjectRequest getObjectRequest = software.amazon.awssdk.services.s3.model.GetObjectRequest.builder() |
|
|
|
.bucket(bucketName) |
|
|
|
.key(objKey) |
|
|
|
.build(); |
|
|
|
|
|
|
|
GetObjectPresignRequest presignRequest = GetObjectPresignRequest.builder() |
|
|
|
.signatureDuration(Duration.ofHours(12)) // expiration time (e.g. 12 hour)
|
|
|
|
.getObjectRequest(getObjectRequest) |
|
|
|
.build(); |
|
|
|
|
|
|
|
// presigned URL
|
|
|
|
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(presignRequest); |
|
|
|
url = presignedRequest.url(); |
|
|
|
|
|
|
|
// Temporary URL
|
|
|
|
// logger.info("Temporary URL: {}", url);
|
|
|
|
} |
|
|
|
|
|
|
|
return SimpleDataResponse.success(url); |
|
|
|
|
|
|
|
} catch (NoSuchKeyException e) { |
|
|
|
logger.error("getTemporaryLink NoSuchKeyException", e); |
|
|
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "File not found"); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("getTemporaryLink error", e); |
|
|
|
return new SimpleDataResponse(ResponseCode.SERVER_ERROR, ResponseCode.SERVER_ERROR_MSG); |
|
|
|
} finally { |
|
|
|
if (null != presigner) { |
|
|
|
presigner.close(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|