Browse Source

临时链接获取

master
review512jwy@163.com 3 months ago
parent
commit
c9b78f9a69
  1. 18
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_en.yml
  2. 18
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_jp.yml
  3. 21
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/CommonController.java
  4. 5
      model2d3d-viewer-back-controller/src/main/resources/config/application.properties
  5. 2
      model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml
  6. 12
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/api/ObjectKey.java
  7. 2
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/DeleteBuildingParams.java
  8. 8
      model2d3d-viewer-back-service/pom.xml
  9. 2
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/CommonService.java
  10. 97
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/CommonServiceImpl.java
  11. 15
      pom.xml

18
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_en.yml

@ -1,14 +1,14 @@
msgen: msgen:
argumentNotValid: argumentNotValid:
1000: 未通过参数校验 1000: Parameter validation failed
1001: 参数不能为空 1001: Parameter cannot be null or empty
1002: 长度不能超过{0} 1002: Length must not exceed {0}
1003: 长度无效 1003: Invalid length
1004: 无效的邮箱 1004: Invalid email address
1005: 数值范围在{0}到{1}之间 1005: Value must be between {0} and {1}
1006: 必须大于或等于{0} 1006: Must be greater than or equal to {0}
1007: 必须小于或等于{0} 1007: Must be less than or equal to {0}
1008: 无效的参数 1008: Invalid parameter
parameterMap: parameterMap:
serviceError: Internal service error. serviceError: Internal service error.
tokenError: API authentication failed. tokenError: API authentication failed.

18
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_jp.yml

@ -1,14 +1,14 @@
msgjp: msgjp:
argumentNotValid: argumentNotValid:
1000: 未通过参数校验 1000: パラメーター検証に失敗しました
1001: 参数不能为空 1001: パラメーターは空にできません
1002: 长度不能超过{0} 1002: 長さは{0}文字以内でなければなりません
1003: 长度无效 1003: 無効な長さです
1004: 无效的邮箱 1004: 無効なメールアドレスです
1005: 数值范围在{0}到{1}之间 1005: 値の範囲は{0}から{1}の間でなければなりません
1006: 必须大于或等于{0} 1006: "{0}以上でなければなりません"
1007: 必须小于或等于{0} 1007: "{0}以下でなければなりません"
1008: 无效的参数 1008: 無効なパラメーターです
parameterMap: parameterMap:
serviceError: 内部サービスのエラー serviceError: 内部サービスのエラー
tokenError: インターフェイスの認証に失敗 tokenError: インターフェイスの認証に失敗

21
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/CommonController.java

@ -2,19 +2,18 @@ package com.model2d3d.viewer.back.controller;
import java.util.List; import java.util.List;
import com.model2d3d.viewer.back.dto.api.ObjectKey;
import com.model2d3d.viewer.back.dto.building.DeleteBuildingParams;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse; import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
@ -45,4 +44,14 @@ public class CommonController{
@Parameter(name="apikey",description="apikey值",required=true) @RequestParam String apikey){ @Parameter(name="apikey",description="apikey值",required=true) @RequestParam String apikey){
return commonService.checkApikey(apikey); return commonService.checkApikey(apikey);
} }
@Operation(summary = "Get temporary link")
@RequestMapping(value = "/getTemporaryLink", method = RequestMethod.POST)
public SimpleDataResponse getTemporaryLink(
@RequestBody @Validated ObjectKey objectKey,
@Parameter(name="Apikey", description="Apikey", required=true, schema = @Schema(defaultValue = "12345678")) @RequestHeader(required=false) Long Apikey,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return commonService.getTemporaryLink(objectKey, Apikey, LanguageType);
}
} }

5
model2d3d-viewer-back-controller/src/main/resources/config/application.properties

@ -96,3 +96,8 @@ web.login.url=${webLoginUrl}
springdoc.swagger-ui.doc-expansion=none springdoc.swagger-ui.doc-expansion=none
springdoc.swagger-ui.operations-sorter=alpha springdoc.swagger-ui.operations-sorter=alpha
springdoc.swagger-ui.tags-sorter=alpha springdoc.swagger-ui.tags-sorter=alpha
amazon.aws.accesskey=${awsAccesskey}
amazon.aws.secretkey=${awsSecretkey}
amazon.aws.bucket.image=${awsBucketImage}

2
model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml

@ -90,7 +90,7 @@
FROM FROM
basic_user buser basic_user buser
inner join basic_company bcom on bcom.id = buser.company_id inner join basic_company bcom on bcom.id = buser.company_id
WHERE buser.flag != 1 and bcom.flag != 1 and (buser.login_name = #{loginname} OR buser.email = #{loginName}) WHERE buser.flag != 1 and bcom.flag != 1 and (buser.login_name = #{loginname} OR buser.email = #{loginname})
</select> </select>
</mapper> </mapper>

12
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/api/ObjectKey.java

@ -0,0 +1,12 @@
package com.model2d3d.viewer.back.dto.api;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Data
public class ObjectKey {
@NotBlank(message = "1001")
private String objectKey;
}

2
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/DeleteBuildingParams.java

@ -1,6 +1,7 @@
package com.model2d3d.viewer.back.dto.building; package com.model2d3d.viewer.back.dto.building;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@ -12,6 +13,7 @@ import java.util.List;
@Data @Data
public class DeleteBuildingParams{ public class DeleteBuildingParams{
@NotEmpty(message = "1001")
@Schema(description ="Building IDs, array", example = "[\"acbdef2738967\",\"abcc556587\"]") @Schema(description ="Building IDs, array", example = "[\"acbdef2738967\",\"abcc556587\"]")
private List<String> buildingIds; private List<String> buildingIds;

8
model2d3d-viewer-back-service/pom.xml

@ -51,5 +51,13 @@
<version>2.3.2</version> <version>2.3.2</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/software.amazon.awssdk/s3 -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.31.20</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

2
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/CommonService.java

@ -1,6 +1,7 @@
package com.model2d3d.viewer.back.service; package com.model2d3d.viewer.back.service;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse; import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import com.model2d3d.viewer.back.dto.api.ObjectKey;
/** /**
* *
@ -11,4 +12,5 @@ public interface CommonService {
SimpleDataResponse checkApikey(String apikey); SimpleDataResponse checkApikey(String apikey);
SimpleDataResponse getTemporaryLink(ObjectKey objectKey, Long apikey, Integer languageType);
} }

97
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/CommonServiceImpl.java

@ -1,7 +1,10 @@
package com.model2d3d.viewer.back.service.impl; package com.model2d3d.viewer.back.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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 com.model2d3d.viewer.back.model.BasicCompany;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; 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.dao.ex.BasicCompanyMapperExt;
import com.model2d3d.viewer.back.service.CommonService; import com.model2d3d.viewer.back.service.CommonService;
import com.model2d3d.viewer.back.service.common.CommonOpt; 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 @Service
public class CommonServiceImpl implements CommonService { 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}") @Value("${amazon.aws.bucket.image:}")
private String dbUrl; private String awsBucketAdress;
@Value("${spring.datasource.username}")
private String dbUsername;
@Value("${spring.datasource.password}")
private String dbPassword;
@Autowired @Autowired
private CommonOpt commonOpt; private CommonOpt commonOpt;
@ -57,4 +75,69 @@ public class CommonServiceImpl implements CommonService {
} }
return resp; 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();
}
}
}
} }

15
pom.xml

@ -178,6 +178,11 @@
<webLoginUrl>http://49.234.37.33:92/#/user/login</webLoginUrl> <webLoginUrl>http://49.234.37.33:92/#/user/login</webLoginUrl>
<mybatisLogLevel>DEBUG</mybatisLogLevel> <mybatisLogLevel>DEBUG</mybatisLogLevel>
<awsAccesskey>AKIA5OFH5OOZHM3U3KX4</awsAccesskey>
<awsSecretkey>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</awsSecretkey>
<awsBucketImage>tokyobuild-stg-databucket-923770123186</awsBucketImage>
</properties> </properties>
<build> <build>
<plugins> <plugins>
@ -220,6 +225,11 @@
<webLoginUrl>http://49.234.37.33:92/#/user/login</webLoginUrl> <webLoginUrl>http://49.234.37.33:92/#/user/login</webLoginUrl>
<mybatisLogLevel>DEBUG</mybatisLogLevel> <mybatisLogLevel>DEBUG</mybatisLogLevel>
<awsAccesskey>AKIA5OFH5OOZHM3U3KX4</awsAccesskey>
<awsSecretkey>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</awsSecretkey>
<awsBucketImage>tokyobuild-stg-databucket-923770123186</awsBucketImage>
</properties> </properties>
<build> <build>
<plugins> <plugins>
@ -263,6 +273,11 @@
<webLoginUrl>http://49.234.37.33:92/#/user/login</webLoginUrl> <webLoginUrl>http://49.234.37.33:92/#/user/login</webLoginUrl>
<mybatisLogLevel>DEBUG</mybatisLogLevel> <mybatisLogLevel>DEBUG</mybatisLogLevel>
<awsAccesskey>AKIA5OFH5OOZHM3U3KX4</awsAccesskey>
<awsSecretkey>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</awsSecretkey>
<awsBucketImage>tokyobuild-stg-databucket-923770123186</awsBucketImage>
</properties> </properties>
<build> <build>
<plugins> <plugins>

Loading…
Cancel
Save