Commit e0edaf25 authored by tangtuo's avatar tangtuo

debug

parent ea77b414
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/sql/joying.sql" dialect="MySQL" />
</component>
</project>
\ No newline at end of file
...@@ -12,22 +12,24 @@ import com.fzm.common.entity.dto.CopyrightQueryRequest; ...@@ -12,22 +12,24 @@ import com.fzm.common.entity.dto.CopyrightQueryRequest;
import com.fzm.common.entity.dto.CopyrightQueryResponse; import com.fzm.common.entity.dto.CopyrightQueryResponse;
import com.fzm.common.entity.vo.NftVo; import com.fzm.common.entity.vo.NftVo;
import com.fzm.common.enums.CopyrightApplyState; import com.fzm.common.enums.CopyrightApplyState;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.properties.CopyrightProperties; import com.fzm.common.properties.CopyrightProperties;
import com.fzm.common.service.CopyrightApplyService; import com.fzm.common.service.CopyrightApplyService;
import com.fzm.common.service.NftService; import com.fzm.common.service.NftService;
import com.fzm.common.utils.CopyrightSignUtil; import com.fzm.common.utils.CopyrightSignUtil;
import com.fzm.common.utils.JsonUtil;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.ExecutionException;
/** /**
* @author tangtuo * @author tangtuo
...@@ -63,8 +65,9 @@ public class CopyrightLister { ...@@ -63,8 +65,9 @@ public class CopyrightLister {
* @param serial_code * @param serial_code
*/ */
@RabbitListener(queues = RabbitMQConfig.COPYRIGHT_QUEUE) @RabbitListener(queues = RabbitMQConfig.COPYRIGHT_QUEUE)
public void listerCopyrightApply(String serial_code) throws ExecutionException, InterruptedException { public void listerCopyrightApply(String serial_code, Message message, Channel channel) throws IOException {
log.info("监听者接收消息, 流水号为: {}", serial_code); log.info("监听者接收消息, 流水号为: {}", serial_code);
long deliveryTag = message.getMessageProperties().getDeliveryTag();
CopyrightQueryRequest request = new CopyrightQueryRequest(serial_code, copyrightProperties.getAppId()); CopyrightQueryRequest request = new CopyrightQueryRequest(serial_code, copyrightProperties.getAppId());
TreeMap<String, String> map = this.beanToMap(request, copyrightProperties.getAppSecret()); TreeMap<String, String> map = this.beanToMap(request, copyrightProperties.getAppSecret());
String sign = CopyrightSignUtil.generateSign(map); String sign = CopyrightSignUtil.generateSign(map);
...@@ -74,15 +77,28 @@ public class CopyrightLister { ...@@ -74,15 +77,28 @@ public class CopyrightLister {
String response = HttpUtil.post(copyrightProperties.getQueryUrl(), json, 10000); String response = HttpUtil.post(copyrightProperties.getQueryUrl(), json, 10000);
log.info("查询审核结果接口响应内容: {}", response); log.info("查询审核结果接口响应内容: {}", response);
if (StringUtils.isBlank(response)) { if (StringUtils.isBlank(response)) {
throw GlobalException.newException(ResultCode.COPYRIGHT_FAILED, "版权局接口无响应,请稍后重试"); // 接口无响应, 把消息丢进延时队列, 稍后重试
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
channel.basicAck(deliveryTag, false);
log.error("版权局查询存证接口无响应");
return;
} }
CopyrightQueryResponse copyrightResponse = JSONUtil.toBean(response, CopyrightQueryResponse.class); CopyrightQueryResponse copyrightResponse = JsonUtil.toObject(response, CopyrightQueryResponse.class);
if (copyrightResponse == null) { if (copyrightResponse == null) {
throw GlobalException.newException(ResultCode.COPYRIGHT_FAILED, "版权局接口无响应,请稍后重试"); // 接口无响应,手动签收, 把消息丢进延时队列, 稍后重试
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
channel.basicAck(deliveryTag, false);
log.error("版权局查询存证接口无响应");
return;
} }
if (!copyrightResponse.isSuccess()) { if (!copyrightResponse.isSuccess()) {
throw GlobalException.newException(ResultCode.COPYRIGHT_FAILED, copyrightResponse.getMessage()); // 接口请求失败,手动签收, 把消息丢进延时队列, 稍后重试
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
channel.basicAck(deliveryTag, false);
log.error("接口响应失败, 失败原因:{}", copyrightResponse.getMessage());
return;
} }
try {
//审核状态(0:未提交,1:待审核,2:同意,3:驳回,4:已提交,5:待终审,6:审核通过) //审核状态(0:未提交,1:待审核,2:同意,3:驳回,4:已提交,5:待终审,6:审核通过)
if (!copyrightResponse.getAudit_status().equals(3) && !copyrightResponse.getAudit_status().equals(6)) { if (!copyrightResponse.getAudit_status().equals(3) && !copyrightResponse.getAudit_status().equals(6)) {
// 审核中, 需要把当前流水号丢进死信队列, 6小时后再去查询 // 审核中, 需要把当前流水号丢进死信队列, 6小时后再去查询
...@@ -92,22 +108,36 @@ public class CopyrightLister { ...@@ -92,22 +108,36 @@ public class CopyrightLister {
if (copyrightResponse.getAudit_status().equals(6)) { if (copyrightResponse.getAudit_status().equals(6)) {
// 审核成功 // 审核成功
String nftHash = copyrightApply.getNftHash(); String nftHash = copyrightApply.getNftHash();
copyrightApply.setEvidenceDate(DateUtil.parse(copyrightResponse.getApply_time(), "yyyy-MM-dd"));
copyrightApply.setRegisterCode(copyrightResponse.getCertificate().getRegister_code());
copyrightApply.setRegisterState(CopyrightApplyState.SUCCEEDED.getCode());
Nft nft = nftService.getByNftHash(nftHash); Nft nft = nftService.getByNftHash(nftHash);
String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), nft.getPublishAddress()); String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), nft.getPublishAddress());
NftVo detail = nftService.getDetail(nftHash); NftVo detail = nftService.getDetail(nftHash);
String newTokenInfo = appendTokenInfo(tokenInfo, detail.getCopyright()); String newTokenInfo = appendTokenInfo(tokenInfo, detail.getCopyright());
String hash = paraChainClient.evmSetTokenInfo(abi, contractAddr, 0l, nft.getTokenId(), newTokenInfo, nft.getPublishAddress(), null, true); log.info("追加tokenInfo, 新生成后的tokenInfo为: {}", newTokenInfo);
String hash = paraChainClient.evmSetTokenInfo(abi, contractAddr, 0, nft.getTokenId(), newTokenInfo, nft.getPublishAddress(), null, true);
if (StringUtils.isBlank(hash)) {
log.error("nft追加tokenInfo失败,当前流水号为: 【{}】", serial_code);
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
return;
}
String realTxHash = paraChainClient.getRealTxHashFromGrp(hash); String realTxHash = paraChainClient.getRealTxHashFromGrp(hash);
copyrightApply.setEvidenceHash(realTxHash); copyrightApply.setEvidenceHash(realTxHash);
copyrightApply.setEvidenceDate(DateUtil.parse(copyrightResponse.getApply_time(), "yyyy-MM-dd"));
copyrightApply.setRegisterCode(copyrightResponse.getCertificate().getRegister_code());
copyrightApply.setRegisterState(CopyrightApplyState.SUCCEEDED.getCode());
} else { } else {
// 审核失败 // 审核失败
copyrightApply.setRegisterState(CopyrightApplyState.FAILED.getCode()); copyrightApply.setRegisterState(CopyrightApplyState.FAILED.getCode());
} }
copyrightApplyService.updateById(copyrightApply); copyrightApplyService.updateById(copyrightApply);
} }
} catch (Exception e) {
// 如果上链失败或者更新状态失败, 那么就把消息重新丢入延时队列,稍后重试
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
log.error(e.getMessage(), e);
} finally {
channel.basicAck(deliveryTag, false);
}
} }
private TreeMap<String, String> beanToMap(CopyrightQueryRequest request, String app_secret) { private TreeMap<String, String> beanToMap(CopyrightQueryRequest request, String app_secret) {
...@@ -118,20 +148,46 @@ public class CopyrightLister { ...@@ -118,20 +148,46 @@ public class CopyrightLister {
} }
private String appendTokenInfo(String tokenInfo, NftVo.Copyright copyright) { private String appendTokenInfo(String tokenInfo, NftVo.Copyright copyright) {
StringBuilder stringBuilder = new StringBuilder(tokenInfo); String[] split = tokenInfo.split("&");
stringBuilder.append("&"). TreeMap<String, String> map = new TreeMap<>();
append("evidencer").append("=").append(copyright.getEvidencer()).append("&"). for (String s : split) {
append("opusName").append("=").append(copyright.getOpusName()).append("&"). String[] arr = s.split("=");
append("opusType").append("=").append(copyright.getOpusType()).append("&"). String key = arr[0];
append("author").append("=").append(copyright.getAuthor()).append("&"). String value;
append("copyrightOwner").append("=").append(copyright.getCopyrightOwner()).append("&"). if (arr.length < 2) {
append("registerCode").append("=").append(copyright.getRegisterCode()); value = "";
return stringBuilder.toString(); } else {
value = arr[1];
}
map.put(key, value);
}
map.put("evidencer", copyright.getEvidencer());
map.put("opusName", copyright.getOpusName());
map.put("opusType", copyright.getOpusType());
map.put("author", copyright.getAuthor());
map.put("copyrightOwner", copyright.getCopyrightOwner());
map.put("registerCode", copyright.getRegisterCode());
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, String> entry : map.entrySet()) {
String value = entry.getValue();
String key = entry.getKey();
stringBuilder.append(key).append("=").append(value).append("&");
}
return stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString();
} }
public static void main(String[] args) { public static void main(String[] args) {
String param = " {\"charset\":\"utf-8\",\"biz_content\":\"{\\\"serial_code\\\":\\\"21123030879\\\"}\",\"sign\":\"db432c9e6bc9d16a1e051f093d58ee33\",\"version\":\"1.0\",\"app_id\":\"289391457858\",\"sign_type\":\"md5\",\"timestamp\":\"2021-12-30 16:00:21\"}"; // String param = " {\"charset\":\"utf-8\",\"biz_content\":\"{\\\"serial_code\\\":\\\"21123030879\\\"}\",\"sign\":\"db432c9e6bc9d16a1e051f093d58ee33\",\"version\":\"1.0\",\"app_id\":\"289391457858\",\"sign_type\":\"md5\",\"timestamp\":\"2021-12-30 16:00:21\"}";
String response = HttpUtil.post("https://p.yareiot.com/ccct/api/copyright/query", param, 10000); // String response = HttpUtil.post("https://p.yareiot.com/ccct/api/copyright/query", param, 10000);
System.out.println(response); // System.out.println(response);
String str = "{\"success\":true,\"message\":\"查询成功\",\"code\":200,\"timestamp\":\"2021-12-31 17:26:44\",\"remark\":null,\"certificate\":null,\"sign\":\"eed26cc1a9d09cabe5ef1c984c8365d1\",\"copyright_detail\":{\"nature_code\":1,\"nature_desc\":\"\",\"nature_name\":null,\"end_time\":\"2021-12-16\",\"end_address\":\"上海市上海市\",\"works_desc\":\"哈哈哈哈哈哈\",\"works_create_desc\":\"哈哈哈哈哈哈哈\",\"publish_status\":1,\"publish_time\":null,\"publish_address\":null,\"agency_photo\":null,\"works_name\":\"依然范特西\",\"works_type_code\":3,\"works_type_name\":null,\"works_type_desc\":\"\",\"rights_affilia_code\":1,\"rights_affilia_name\":null,\"affilia_photo\":\"\",\"gain_code\":null,\"gain_name\":null,\"gain_desc\":null,\"geren_uname\":null,\"geren_uxname\":null,\"geren_uxname_type\":null,\"geren_uxname_type_name\":null,\"gain_photo\":\"\",\"author_photo\":\"\",\"entrust_photo\":null,\"rights_desc\":\"发版权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权、其他\",\"other_photo\":\"\",\"rights_guarantee_photo\":\"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/9d623f3c8c94458cad029b0881238231/HupuBBS_211230152310-1242822577.png\",\"is_grade\":0,\"cooperator\":null,\"works_files\":[{\"file_name\":\"shareSongImage_temp_1630212140166.jpg\",\"file\":\"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/fb8e84e816e346d2b41e488224b292d0/shareSongImage_temp_1630212140166.jpg\",\"file_format\":\"jpg\",\"file_size\":\"19.21KB\",\"file_token\":\"2c06dde6f97213c133380199fec3eb33\",\"keywords\":null}],\"owner_list\":[{\"owner_name\":\"金庸\",\"owner_type_code\":2,\"document_type_code\":2,\"document_code\":\"34783huirh43i4834\",\"other_document_code\":null,\"document_image\":null,\"other_start_date\":null,\"other_end_date\":\"2021-12-22\",\"is_forever\":1,\"valid_start_date\":null,\"valid_end_date\":null,\"handheld_photo\":\"\",\"front_photo\":\"\",\"back_photo\":\"\",\"company_photo\":\"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211224/15489ec28bf241a6bae28f7f35cffb1d/微信图片_202102.jpg\",\"prove_photo\":\"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211224/cfc47db66eac46559ddf3c6583006d34/微信图片_20210802152956.jpg\",\"province\":\"天津市\",\"province_id\":\"120000\",\"city\":\"天津市\",\"city_id\":\"120100\",\"address\":\"天津市天津市\",\"owner_sign_name\":\"\",\"owner_type_name\":null,\"document_type_name\":null},{\"owner_name\":\"古龙\",\"owner_type_code\":1,\"document_type_code\":1,\"document_code\":\"45164646464694946\",\"other_document_code\":null,\"document_image\":null,\"other_start_date\":null,\"other_end_date\":\"2021-12-21\",\"is_forever\":1,\"valid_start_date\":null,\"valid_end_date\":null,\"handheld_photo\":\"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/4fb6881790c74d9c8de13581b0c46047/timg_image&quality=80&size=b9999_10000&sec=1588500161897&di=fcfcda647d253ea2fb5b858719070998&imgtype=0&src=http%3A%2F%2Fimg.jpg\",\"front_photo\":\"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/8d627d66ad4743b698b7a11df312f8cc/-624ec7938a1e0c8a.png\",\"back_photo\":\"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/1b4a307e7cb2411da809686117196ae6/-624ec7938a1e0c8a.png\",\"company_photo\":\"\",\"prove_photo\":\"\",\"province\":\"天津市\",\"province_id\":\"120000\",\"city\":\"天津市\",\"city_id\":\"120100\",\"address\":\"天津市天津市\",\"owner_sign_name\":\"\",\"owner_type_name\":null,\"document_type_name\":null}]},\"audit_status\":5,\"apply_time\":\"2021-12-30\"}";
// CopyrightQueryResponse copyrightResponse = JSONUtil.toBean(str, new TypeReference<CopyrightQueryResponse>() {
// },true);
CopyrightQueryResponse copyrightQueryResponse = JsonUtil.toObject(str, CopyrightQueryResponse.class);
//CopyrightQueryResponse copyrightResponse = JSONObject.parseObject(str, CopyrightQueryResponse.class);
System.out.println(copyrightQueryResponse);
} }
} }
...@@ -53,7 +53,7 @@ spring: ...@@ -53,7 +53,7 @@ spring:
password: admin password: admin
listener: listener:
simple: simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack acknowledge-mode: manual #acknowledge-mode: none,关闭ack; manual,手动ack; auto:自动ack
swagger: swagger:
title: 乐映影视后台管理系统 title: 乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API description: 乐映影视后台管理系统RESTFUL API
...@@ -96,4 +96,9 @@ copyright: ...@@ -96,4 +96,9 @@ copyright:
app-id: 289391457858 app-id: 289391457858
app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
...@@ -54,7 +54,7 @@ spring: ...@@ -54,7 +54,7 @@ spring:
password: admin password: admin
listener: listener:
simple: simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack acknowledge-mode: manual #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
swagger: swagger:
title: 乐映影视乐映影视后台管理系统 title: 乐映影视乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API description: 乐映影视后台管理系统RESTFUL API
...@@ -97,3 +97,9 @@ copyright: ...@@ -97,3 +97,9 @@ copyright:
app-id: 289391457858 app-id: 289391457858
app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -54,7 +54,7 @@ spring: ...@@ -54,7 +54,7 @@ spring:
password: guest password: guest
listener: listener:
simple: simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack acknowledge-mode: manual #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
swagger: swagger:
title: 乐映影视后台管理系统 title: 乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API description: 乐映影视后台管理系统RESTFUL API
...@@ -98,4 +98,9 @@ copyright: ...@@ -98,4 +98,9 @@ copyright:
app-id: 289391457858 app-id: 289391457858
app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
...@@ -46,6 +46,14 @@ spring: ...@@ -46,6 +46,14 @@ spring:
redis: redis:
# 缓存失效时间 # 缓存失效时间
time-to-live: 86400000 time-to-live: 86400000
rabbitmq:
host: 123.60.58.16
port: 5672
username: admin
password: admin
listener:
simple:
acknowledge-mode: manual #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
swagger: swagger:
title: 乐映影视后台管理系统 title: 乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API description: 乐映影视后台管理系统RESTFUL API
...@@ -83,7 +91,14 @@ aliyun: ...@@ -83,7 +91,14 @@ aliyun:
encrypt-bucket: joying-nft encrypt-bucket: joying-nft
copyright: copyright:
url: https://p.yareiot.com/ccct/ccct/api/copyright/create
app-id: 289391457858 app-id: 289391457858
app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK
apply-url: https://p.yareiot.com/ccct/ccct/api/copyright/create
query-url: https://p.yareiot.com/ccct/ccct/api/copyright/query
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -53,7 +53,7 @@ spring: ...@@ -53,7 +53,7 @@ spring:
password: admin password: admin
listener: listener:
simple: simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack acknowledge-mode: manual #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
swagger: swagger:
title: 乐映影视乐映影视后台管理系统 title: 乐映影视乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API description: 乐映影视后台管理系统RESTFUL API
...@@ -95,3 +95,9 @@ copyright: ...@@ -95,3 +95,9 @@ copyright:
app-id: 289391457858 app-id: 289391457858
app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -101,6 +101,12 @@ ...@@ -101,6 +101,12 @@
<artifactId>tencentcloud-sdk-java</artifactId> <artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.322</version> <version>3.1.322</version>
</dependency> </dependency>
<dependency>
<groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java</artifactId>
<version>3.20.6.1</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
......
package com.fzm.common.config;
import com.fzm.common.properties.ObsProperties;
import com.obs.services.ObsClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author tangtuo
* @date 2021/12/31 14:51
*/
@Configuration
public class ObsConfig {
@Bean
public ObsClient obsClient(ObsProperties obsProperties) {
return new ObsClient(obsProperties.getAppKey(), obsProperties.getAppSecret(), obsProperties.getEndPoint());
}
}
...@@ -61,7 +61,7 @@ public class RabbitMQConfig { ...@@ -61,7 +61,7 @@ public class RabbitMQConfig {
@Bean @Bean
public Queue dlQueue() { public Queue dlQueue() {
return QueueBuilder.durable(DEAD_LETTER_QUEUE) return QueueBuilder.durable(DEAD_LETTER_QUEUE)
.ttl(1000 * 60 * 2) .ttl(1000 * 60 * 60 * 6)
.deadLetterExchange(DEAD_LETTER_DIRECT) .deadLetterExchange(DEAD_LETTER_DIRECT)
.deadLetterRoutingKey("copyright.notify") .deadLetterRoutingKey("copyright.notify")
.build(); .build();
......
package com.fzm.common.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author tangtuo
* @date 2021/6/29 15:54
*/
@Data
@Component
@ConfigurationProperties(prefix = "huaweiyun.obs")
public class ObsProperties {
private String appKey;
private String appSecret;
private String endPoint;
private String bucket;
}
...@@ -24,7 +24,7 @@ import com.fzm.common.mapper.CopyrightApplyMapper; ...@@ -24,7 +24,7 @@ import com.fzm.common.mapper.CopyrightApplyMapper;
import com.fzm.common.properties.CopyrightProperties; import com.fzm.common.properties.CopyrightProperties;
import com.fzm.common.service.*; import com.fzm.common.service.*;
import com.fzm.common.utils.CopyrightSignUtil; import com.fzm.common.utils.CopyrightSignUtil;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -77,7 +77,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper, ...@@ -77,7 +77,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
private NftService nftService; private NftService nftService;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Resource @Resource
private ThreadPoolTaskExecutor threadPoolTaskExecutor; private ThreadPoolTaskExecutor threadPoolTaskExecutor;
...@@ -183,11 +183,11 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper, ...@@ -183,11 +183,11 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
} }
// 删除权力取得方式的附件 // 删除权力取得方式的附件
if (StringUtils.isNotBlank(copyright.getAuthorityAcquireMode())) { if (StringUtils.isNotBlank(copyright.getAuthorityAcquireMode())) {
ossUtil.delete(copyright.getAuthorityAcquireMode()); obsUtil.delete(copyright.getAuthorityAcquireMode());
} }
// 删除权力归属证明附件 // 删除权力归属证明附件
if (StringUtils.isNotBlank(copyright.getAuthorityAscriptionMode())) { if (StringUtils.isNotBlank(copyright.getAuthorityAscriptionMode())) {
ossUtil.delete(copyright.getAuthorityAcquireMode()); obsUtil.delete(copyright.getAuthorityAcquireMode());
} }
// 删除附件列表 // 删除附件列表
copyrightFileService.delByCopyrightId(id); copyrightFileService.delByCopyrightId(id);
......
...@@ -2,12 +2,11 @@ package com.fzm.common.service.impl; ...@@ -2,12 +2,11 @@ package com.fzm.common.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.common.entity.CopyrightFile; import com.fzm.common.entity.CopyrightFile;
import com.fzm.common.mapper.CopyrightFileMapper; import com.fzm.common.mapper.CopyrightFileMapper;
import com.fzm.common.service.CopyrightFileService; import com.fzm.common.service.CopyrightFileService;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -24,7 +23,7 @@ public class CopyrightFileServiceImpl extends ServiceImpl<CopyrightFileMapper, C ...@@ -24,7 +23,7 @@ public class CopyrightFileServiceImpl extends ServiceImpl<CopyrightFileMapper, C
private CopyrightFileMapper copyrightFileMapper; private CopyrightFileMapper copyrightFileMapper;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Override @Override
...@@ -38,7 +37,7 @@ public class CopyrightFileServiceImpl extends ServiceImpl<CopyrightFileMapper, C ...@@ -38,7 +37,7 @@ public class CopyrightFileServiceImpl extends ServiceImpl<CopyrightFileMapper, C
public Integer delByCopyrightId(Integer copyrightId) { public Integer delByCopyrightId(Integer copyrightId) {
List<CopyrightFile> list = getByCopyrightId(copyrightId); List<CopyrightFile> list = getByCopyrightId(copyrightId);
for (CopyrightFile file : list) { for (CopyrightFile file : list) {
ossUtil.delete(file.getFileUrl()); obsUtil.delete(file.getFileUrl());
} }
UpdateWrapper<CopyrightFile> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<CopyrightFile> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("copyright_id", copyrightId); updateWrapper.eq("copyright_id", copyrightId);
......
...@@ -14,7 +14,7 @@ import com.fzm.common.enums.ResultCode; ...@@ -14,7 +14,7 @@ import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException; import com.fzm.common.exception.GlobalException;
import com.fzm.common.mapper.DraftMapper; import com.fzm.common.mapper.DraftMapper;
import com.fzm.common.service.*; import com.fzm.common.service.*;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -32,7 +32,7 @@ public class DraftServiceImpl extends ServiceImpl<DraftMapper, Draft> implements ...@@ -32,7 +32,7 @@ public class DraftServiceImpl extends ServiceImpl<DraftMapper, Draft> implements
private DraftMapper draftMapper; private DraftMapper draftMapper;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Resource @Resource
private CopyrightApplyService copyrightApplyService; private CopyrightApplyService copyrightApplyService;
...@@ -63,17 +63,17 @@ public class DraftServiceImpl extends ServiceImpl<DraftMapper, Draft> implements ...@@ -63,17 +63,17 @@ public class DraftServiceImpl extends ServiceImpl<DraftMapper, Draft> implements
if (copyrightDTO != null) { if (copyrightDTO != null) {
// 删除权力取得方式的附件权力 // 删除权力取得方式的附件权力
if (StringUtils.isNotBlank(copyrightDTO.getAuthorityAcquireMode())) { if (StringUtils.isNotBlank(copyrightDTO.getAuthorityAcquireMode())) {
ossUtil.delete(copyrightDTO.getAuthorityAcquireMode()); obsUtil.delete(copyrightDTO.getAuthorityAcquireMode());
} }
// 删除权力归属证明附件 // 删除权力归属证明附件
if (StringUtils.isNotBlank(copyrightDTO.getAuthorityAscriptionMode())) { if (StringUtils.isNotBlank(copyrightDTO.getAuthorityAscriptionMode())) {
ossUtil.delete(copyrightDTO.getAuthorityAcquireMode()); obsUtil.delete(copyrightDTO.getAuthorityAcquireMode());
} }
// 删除文件列表 // 删除文件列表
if (CollectionUtil.isNotEmpty(copyrightDTO.getFiles())) { if (CollectionUtil.isNotEmpty(copyrightDTO.getFiles())) {
for (CopyrightDTO.File file : copyrightDTO.getFiles()) { for (CopyrightDTO.File file : copyrightDTO.getFiles()) {
if (StringUtils.isNotBlank(file.getFileUrl())) { if (StringUtils.isNotBlank(file.getFileUrl())) {
ossUtil.delete(file.getFileUrl()); obsUtil.delete(file.getFileUrl());
} }
} }
} }
......
...@@ -26,7 +26,7 @@ import com.fzm.common.params.NftTransferParam; ...@@ -26,7 +26,7 @@ import com.fzm.common.params.NftTransferParam;
import com.fzm.common.properties.SmsProperties; import com.fzm.common.properties.SmsProperties;
import com.fzm.common.service.*; import com.fzm.common.service.*;
import com.fzm.common.utils.JwtUtil; import com.fzm.common.utils.JwtUtil;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import com.fzm.common.utils.RedisUtil; import com.fzm.common.utils.RedisUtil;
import com.fzm.common.utils.SmsUtil; import com.fzm.common.utils.SmsUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
...@@ -77,7 +77,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -77,7 +77,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
private NftTransferRecordService nftTransferRecordService; private NftTransferRecordService nftTransferRecordService;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Resource @Resource
private SmsUtil smsUtil; private SmsUtil smsUtil;
...@@ -392,7 +392,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -392,7 +392,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
if (nft == null) { if (nft == null) {
throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft详情"); throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft详情");
} }
ossUtil.downloadFile(nft.getFileUrl(), nft.getFileName()); obsUtil.downloadFile(nft.getFileUrl(), nft.getFileName());
} }
private long getTokenId() { private long getTokenId() {
......
...@@ -82,7 +82,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -82,7 +82,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private HttpServletRequest request; private HttpServletRequest request;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Resource @Resource
private OssProperties ossProperties; private OssProperties ossProperties;
...@@ -182,7 +182,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -182,7 +182,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
User loginUser = getUserByToken(); User loginUser = getUserByToken();
// 如果不是第一次上传头像,需要删除旧头像 // 如果不是第一次上传头像,需要删除旧头像
if (StringUtils.isNotBlank(loginUser.getAvatar())) { if (StringUtils.isNotBlank(loginUser.getAvatar())) {
ossUtil.delete(loginUser.getAvatar()); obsUtil.delete(loginUser.getAvatar());
} }
User user = new User(). User user = new User().
setAvatar(avatar). setAvatar(avatar).
...@@ -238,8 +238,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -238,8 +238,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
Integer status; Integer status;
if (IdCardVerificationResponse.SUCCESS.getCode().equals(response.getResult())) { if (IdCardVerificationResponse.SUCCESS.getCode().equals(response.getResult())) {
// 验证成功上传身份证证件 // 验证成功上传身份证证件
String frontUrl = ossUtil.putSimpleObject(cardPictureFront); String frontUrl = obsUtil.putObject(cardPictureFront);
String backUrl = ossUtil.putSimpleObject(cardPictureBack); String backUrl = obsUtil.putObject(cardPictureBack);
AuthPerson authPerson = new AuthPerson() AuthPerson authPerson = new AuthPerson()
.setUserId(userId) .setUserId(userId)
.setIdCard(response.getIdCard()) .setIdCard(response.getIdCard())
......
package com.fzm.common.utils;
import cn.hutool.core.util.IdUtil;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.properties.ObsProperties;
import com.obs.services.ObsClient;
import com.obs.services.model.DeleteObjectResult;
import com.obs.services.model.ObsObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
/**
* @author tangtuo
* @date 2021/6/29 16:07
*
* <p>
* 华为云对象存储服务工具类
* </p>
*/
@Slf4j
@Component
public class ObsUtil {
@Resource
private ObsClient obsClient;
@Resource
private ObsProperties obsProperties;
@Resource
private HttpServletResponse response;
/**
* 上传对象
*
* @param file
* @return
*/
public String putObject(MultipartFile file) throws IOException {
String objectName = IdUtil.simpleUUID().concat("/").concat(file.getOriginalFilename());
obsClient.putObject(obsProperties.getBucket(), objectName, file.getInputStream());
return String.format("https://%s.%s/%s", obsProperties.getBucket(), obsProperties.getEndPoint(), objectName);
}
/**
* 下载对象
*
* @param fileUrl 文件地址
* @param fileName 文件名
*/
public void downloadFile(String fileUrl, String fileName) {
try {
// 文件名以附件的形式下载
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e) {
log.error(e.getMessage(), e);
throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage());
}
String objectName = fileUrl.substring(String.format("https://%s.%s/", obsProperties.getBucket(), obsProperties.getEndPoint()).length());
ObsObject object = obsClient.getObject(obsProperties.getBucket(), objectName);
try {
// 读取文件内容。
InputStream inputStream = object.getObjectContent();
BufferedInputStream in = new BufferedInputStream(inputStream);// 把输入流放入缓存流
ServletOutputStream outputStream = response.getOutputStream();
BufferedOutputStream out = new BufferedOutputStream(outputStream);// 把输出流放入缓存流
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
out.close();
in.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage());
}
}
/**
* 删除对象
*
* @param fileUrl
* @return
*/
public boolean delete(String fileUrl) {
String objectName = fileUrl.substring(String.format("https://%s.%s/", obsProperties.getBucket(), obsProperties.getEndPoint()).length());
DeleteObjectResult result = obsClient.deleteObject(obsProperties.getBucket(), objectName);
return !result.isDeleteMarker();
}
public static void main(String[] args) {
String endPoint = "obs.cn-east-3.myhuaweicloud.com";
String ak = "HIULSHJZJOTWB72Z38ZB";
String sk = "GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA";
String bucketName = "filmchain-file";
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
String url = "https://filmchain-file.obs.cn-east-3.myhuaweicloud.com/8792bab6a7fe4bb58e64b2c4f54ab220/kubernetes(k8s)课程.pdf";
String objectName = url.substring(String.format("https://%s.%s/", bucketName, endPoint).length());
System.out.println(objectName);
DeleteObjectResult deleteObjectResult = obsClient.deleteObject(bucketName, objectName);
System.out.println(deleteObjectResult);
// String objectName = IdUtil.simpleUUID().concat("/").concat("kubernetes(k8s)课程.pdf");
// PutObjectResult putObjectResult = obsClient.putObject(bucketName, objectName, new File("D:\\资料\\k8s\\课程笔记\\kubernetes(k8s)课程.pdf"));
// System.out.println(putObjectResult);
// System.out.println(String.format("https://%s.%s/%s", bucketName, endPoint, objectName));
}
}
package com.fzm.common.utils; //package com.fzm.common.utils;
//
import cn.hutool.core.date.DateUtil; //import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; //import cn.hutool.core.util.IdUtil;
import com.aliyun.oss.OSS; //import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder; //import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.BinaryUtil; //import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.*; //import com.aliyun.oss.model.*;
import com.fzm.common.enums.ResultCode; //import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException; //import com.fzm.common.exception.GlobalException;
import com.fzm.common.properties.OssProperties; //import com.fzm.common.properties.OssProperties;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile; //import org.springframework.web.multipart.MultipartFile;
//
import javax.annotation.Resource; //import javax.annotation.Resource;
import javax.servlet.ServletOutputStream; //import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; //import javax.servlet.http.HttpServletResponse;
import java.io.*; //import java.io.*;
import java.net.URLEncoder; //import java.net.URLEncoder;
import java.util.Date; //import java.util.Date;
import java.util.LinkedHashMap; //import java.util.LinkedHashMap;
import java.util.Map; //import java.util.Map;
//
/** ///**
* @author tangtuo // * @author tangtuo
* @date 2021/6/29 16:07 // * @date 2021/6/29 16:07
*/ // */
@Slf4j //@Slf4j
@Component //@Component
public class OssUtil { //public class OssUtil {
//
@Resource // @Resource
private OssProperties ossProperties; // private OssProperties ossProperties;
//
@Resource // @Resource
private HttpServletResponse response; // private HttpServletResponse response;
//
/** // /**
* @param file // * @param file
* @return // * @return
*/ // */
public String putObject(MultipartFile file, String bucket) throws IOException { // public String putObject(MultipartFile file, String bucket) throws IOException {
String endpoint = ossProperties.getEndPoint(); // String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey(); // String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret(); // String accessKeySecret = ossProperties.getAppSecret();
// <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。 // // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。
String objectName = String.format("%s/%s/%s", DateUtil.format(new Date(), "yyyyMMdd"), IdUtil.simpleUUID(), file.getOriginalFilename()); // String objectName = String.format("%s/%s/%s", DateUtil.format(new Date(), "yyyyMMdd"), IdUtil.simpleUUID(), file.getOriginalFilename());
//
// 创建OSSClient实例。 // // 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucket, objectName, file.getInputStream()); // ossClient.putObject(bucket, objectName, file.getInputStream());
//
// 关闭OSSClient。 // // 关闭OSSClient。
ossClient.shutdown(); // ossClient.shutdown();
return String.format("https://%s.%s/%s", bucket, endpoint, objectName); // return String.format("https://%s.%s/%s", bucket, endpoint, objectName);
} // }
//
/** // /**
* 文件普通存储 // * 文件普通存储
* // *
* @param file // * @param file
* @return // * @return
* @throws IOException // * @throws IOException
*/ // */
public String putSimpleObject(MultipartFile file) throws IOException { // public String putSimpleObject(MultipartFile file) throws IOException {
return putObject(file, ossProperties.getSimpleBucket()); // return putObject(file, ossProperties.getSimpleBucket());
} // }
//
/** // /**
* 文件加密存储 // * 文件加密存储
* // *
* @param file // * @param file
* @return // * @return
* @throws IOException // * @throws IOException
*/ // */
public String putEncryptObject(MultipartFile file) throws IOException { // public String putEncryptObject(MultipartFile file) throws IOException {
return putObject(file, ossProperties.getEncryptBucket()); // return putObject(file, ossProperties.getEncryptBucket());
} // }
//
public void createEncryptBucket() { // public void createEncryptBucket() {
String endpoint = ossProperties.getEndPoint(); // String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey(); // String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret(); // String accessKeySecret = ossProperties.getAppSecret();
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//
// 创建存储空间。 // // 创建存储空间。
String bucket = ossProperties.getEncryptBucket(); // String bucket = ossProperties.getEncryptBucket();
if (!ossClient.doesBucketExist(bucket)) { // if (!ossClient.doesBucketExist(bucket)) {
// 设置Bucket加密。 // // 设置Bucket加密。
ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.AES256); // ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.AES256);
ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration(); // ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration();
sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault); // sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault);
SetBucketEncryptionRequest request = new SetBucketEncryptionRequest("<yourBucketName>", sseConfig); // SetBucketEncryptionRequest request = new SetBucketEncryptionRequest("<yourBucketName>", sseConfig);
ossClient.setBucketEncryption(request); // ossClient.setBucketEncryption(request);
ossClient.shutdown(); // ossClient.shutdown();
ossClient.createBucket(bucket); // ossClient.createBucket(bucket);
} // }
ossClient.createBucket(ossProperties.getEncryptBucket()); // ossClient.createBucket(ossProperties.getEncryptBucket());
} // }
//
//
/** // /**
* @param fileUrl 文件地址 // * @param fileUrl 文件地址
* @param fileName 文件名 // * @param fileName 文件名
*/ // */
public void downloadFile(String fileUrl, String fileName) { // public void downloadFile(String fileUrl, String fileName) {
String endpoint = ossProperties.getEndPoint(); // String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey(); // String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret(); // String accessKeySecret = ossProperties.getAppSecret();
String bucketName = ossProperties.getEncryptBucket(); // String bucketName = ossProperties.getEncryptBucket();
try { // try {
// 文件名以附件的形式下载 // // 文件名以附件的形式下载
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e) { // } catch (UnsupportedEncodingException e) {
log.error(e.getMessage(), e); // log.error(e.getMessage(), e);
throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage()); // throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage());
} // }
// 创建OSSClient实例。 // // 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。 // // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
fileUrl = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), ""); // fileUrl = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), "");
OSSObject ossObject = ossClient.getObject(bucketName, fileUrl); // OSSObject ossObject = ossClient.getObject(bucketName, fileUrl);
try { // try {
// 读取文件内容。 // // 读取文件内容。
InputStream inputStream = ossObject.getObjectContent(); // InputStream inputStream = ossObject.getObjectContent();
BufferedInputStream in = new BufferedInputStream(inputStream);// 把输入流放入缓存流 // BufferedInputStream in = new BufferedInputStream(inputStream);// 把输入流放入缓存流
ServletOutputStream outputStream = response.getOutputStream(); // ServletOutputStream outputStream = response.getOutputStream();
BufferedOutputStream out = new BufferedOutputStream(outputStream);// 把输出流放入缓存流 // BufferedOutputStream out = new BufferedOutputStream(outputStream);// 把输出流放入缓存流
byte[] buffer = new byte[1024]; // byte[] buffer = new byte[1024];
int len = 0; // int len = 0;
while ((len = in.read(buffer)) != -1) { // while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len); // out.write(buffer, 0, len);
} // }
if (out != null) { // if (out != null) {
out.flush(); // out.flush();
out.close(); // out.close();
} // }
if (in != null) { // if (in != null) {
in.close(); // in.close();
} // }
ossClient.shutdown(); // ossClient.shutdown();
} catch (Exception e) { // } catch (Exception e) {
log.error(e.getMessage(), e); // log.error(e.getMessage(), e);
throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage()); // throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage());
} // }
//
} // }
//
public Map<String, String> policy() { // public Map<String, String> policy() {
String accessId = ossProperties.getAppKey(); // 请填写您的AccessKeyId。 // String accessId = ossProperties.getAppKey(); // 请填写您的AccessKeyId。
String accessKey = ossProperties.getAppSecret(); // 请填写您的AccessKeySecret。 // String accessKey = ossProperties.getAppSecret(); // 请填写您的AccessKeySecret。
String endpoint = ossProperties.getEndPoint(); // 请填写您的 endpoint。 // String endpoint = ossProperties.getEndPoint(); // 请填写您的 endpoint。
String bucket = ossProperties.getEncryptBucket(); // 请填写您的 bucketname 。 // String bucket = ossProperties.getEncryptBucket(); // 请填写您的 bucketname 。
String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint // String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
String dir = DateUtil.format(new Date(), "yyyyMMdd") + "/" + IdUtil.simpleUUID() + "/"; // String dir = DateUtil.format(new Date(), "yyyyMMdd") + "/" + IdUtil.simpleUUID() + "/";
Map<String, String> respMap = new LinkedHashMap<>(); // Map<String, String> respMap = new LinkedHashMap<>();
// 创建OSSClient实例。 // // 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey); // OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
try { // try {
long expireTime = 120; // long expireTime = 120;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000; // long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime); // Date expiration = new Date(expireEndTime);
// PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。 // // PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
PolicyConditions policyConds = new PolicyConditions(); // PolicyConditions policyConds = new PolicyConditions();
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); // policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); // policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
String postPolicy = ossClient.generatePostPolicy(expiration, policyConds); // String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes("utf-8"); // byte[] binaryData = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData); // String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = ossClient.calculatePostSignature(postPolicy); // String postSignature = ossClient.calculatePostSignature(postPolicy);
respMap.put("accessid", accessId); // respMap.put("accessid", accessId);
respMap.put("policy", encodedPolicy); // respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature); // respMap.put("signature", postSignature);
respMap.put("dir", dir); // respMap.put("dir", dir);
respMap.put("host", host); // respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000)); // respMap.put("expire", String.valueOf(expireEndTime / 1000));
return respMap; // return respMap;
} catch (UnsupportedEncodingException e) { // } catch (UnsupportedEncodingException e) {
e.printStackTrace(); // e.printStackTrace();
throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, e.getMessage()); // throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, e.getMessage());
} // }
} // }
//
public void delete(String fileUrl) { // public void delete(String fileUrl) {
String bucketName = ossProperties.getSimpleBucket(); // String bucketName = ossProperties.getSimpleBucket();
String endpoint = ossProperties.getEndPoint(); // String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey(); // String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret(); // String accessKeySecret = ossProperties.getAppSecret();
// <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。 // // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。
String objectName = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), ""); // String objectName = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), "");
// 创建OSSClient实例。 // // 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.deleteObject(bucketName, objectName); // ossClient.deleteObject(bucketName, objectName);
} // }
//
//
public static void main(String[] args) { // public static void main(String[] args) {
String endpoint = "oss-cn-hangzhou.aliyuncs.com"; // String endpoint = "oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "LTAI5tHGn7cVJdEtihTFLSeB"; // String accessKeyId = "LTAI5tHGn7cVJdEtihTFLSeB";
String accessKeySecret = "XYmfBSbLaZoblGXZwIXkbhfBD7a1eg"; // String accessKeySecret = "XYmfBSbLaZoblGXZwIXkbhfBD7a1eg";
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//
String bucket2 = "joying-nft"; // String bucket2 = "joying-nft";
ossClient.deleteObject("test-nft", "20210913/ff8e541497d1482895be1f038bb0430e/微信图片_20210913144401.jpg"); // ossClient.deleteObject("test-nft", "20210913/ff8e541497d1482895be1f038bb0430e/微信图片_20210913144401.jpg");
} // }
//
//
} //}
...@@ -13,7 +13,7 @@ import com.fzm.common.service.CategoryService; ...@@ -13,7 +13,7 @@ import com.fzm.common.service.CategoryService;
import com.fzm.common.service.CommemorateNftService; import com.fzm.common.service.CommemorateNftService;
import com.fzm.common.service.UserService; import com.fzm.common.service.UserService;
import com.fzm.common.utils.JwtUtil; import com.fzm.common.utils.JwtUtil;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import com.fzm.common.utils.RedisUtil; import com.fzm.common.utils.RedisUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -41,7 +41,7 @@ public class CommemorateNftController { ...@@ -41,7 +41,7 @@ public class CommemorateNftController {
private CommemorateNftService commemorateNftService; private CommemorateNftService commemorateNftService;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Resource @Resource
private UserService userService; private UserService userService;
...@@ -71,8 +71,8 @@ public class CommemorateNftController { ...@@ -71,8 +71,8 @@ public class CommemorateNftController {
if (!coverName.endsWith(".png") && !coverName.endsWith(".jpg")) { if (!coverName.endsWith(".png") && !coverName.endsWith(".jpg")) {
throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, "封面类型有误"); throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, "封面类型有误");
} }
String fileUrl = ossUtil.putSimpleObject(file); String fileUrl = obsUtil.putObject(file);
String coverUrl = ossUtil.putSimpleObject(cover); String coverUrl = obsUtil.putObject(cover);
CommemorateNft commemorateNft = new CommemorateNft(). CommemorateNft commemorateNft = new CommemorateNft().
setName(name). setName(name).
setCover(coverUrl). setCover(coverUrl).
......
...@@ -5,7 +5,7 @@ import com.fzm.common.enums.FileSuffix; ...@@ -5,7 +5,7 @@ import com.fzm.common.enums.FileSuffix;
import com.fzm.common.enums.ResultCode; import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException; import com.fzm.common.exception.GlobalException;
import com.fzm.common.model.ResponseModel; import com.fzm.common.model.ResponseModel;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -29,7 +29,7 @@ public class CopyrightFileController { ...@@ -29,7 +29,7 @@ public class CopyrightFileController {
private static final long maxSize = 1024 * 1024 * 200; private static final long maxSize = 1024 * 1024 * 200;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@PostMapping("/upload") @PostMapping("/upload")
@ApiOperation(value = "上传版权申请附件") @ApiOperation(value = "上传版权申请附件")
...@@ -44,7 +44,7 @@ public class CopyrightFileController { ...@@ -44,7 +44,7 @@ public class CopyrightFileController {
throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, "不支持当前上传的文件类型"); throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, "不支持当前上传的文件类型");
} }
String url = ossUtil.putSimpleObject(file); String url = obsUtil.putObject(file);
return ResponseModel.success(url); return ResponseModel.success(url);
} }
} }
package com.fzm.portal.controller; package com.fzm.portal.controller;
import com.fasterxml.jackson.databind.deser.std.NumberDeserializers;
import com.fzm.common.annotation.Authentication; import com.fzm.common.annotation.Authentication;
import com.fzm.common.model.ResponseModel; import com.fzm.common.model.ResponseModel;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import com.tencentcloudapi.tsf.v20180326.models.TaskRule;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.Map;
/** /**
* @author tangtuo * @author tangtuo
...@@ -24,21 +24,14 @@ import java.util.Map; ...@@ -24,21 +24,14 @@ import java.util.Map;
public class OssController { public class OssController {
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Authentication
@GetMapping("/policy")
@ApiOperation("完成oss签名")
public ResponseModel<Map<String, String>> policy() {
Map<String, String> policy = ossUtil.policy();
return ResponseModel.success(policy);
}
@Authentication @Authentication
@PostMapping("/upload") @PostMapping("/upload")
@ApiOperation("普通文件上传") @ApiOperation("普通文件上传")
public ResponseModel<String> upload(MultipartFile file) throws IOException { public ResponseModel<String> upload(MultipartFile file) throws IOException {
return ResponseModel.success(ossUtil.putSimpleObject(file)); return ResponseModel.success(obsUtil.putObject(file));
} }
...@@ -47,7 +40,7 @@ public class OssController { ...@@ -47,7 +40,7 @@ public class OssController {
@ApiOperation(value = "下载文件") @ApiOperation(value = "下载文件")
public void download(@RequestParam String fileUrl) { public void download(@RequestParam String fileUrl) {
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1); String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
ossUtil.downloadFile(fileUrl, fileName); obsUtil.downloadFile(fileUrl, fileName);
} }
...@@ -55,7 +48,6 @@ public class OssController { ...@@ -55,7 +48,6 @@ public class OssController {
@ApiOperation(value = "删除文件") @ApiOperation(value = "删除文件")
@PostMapping(value = "/delete") @PostMapping(value = "/delete")
public ResponseModel<Boolean> delete(String fileUrl) { public ResponseModel<Boolean> delete(String fileUrl) {
ossUtil.delete(fileUrl); return ResponseModel.success(obsUtil.delete(fileUrl));
return ResponseModel.success(true);
} }
} }
...@@ -3,7 +3,6 @@ package com.fzm.portal.controller; ...@@ -3,7 +3,6 @@ package com.fzm.portal.controller;
import com.fzm.common.annotation.Authentication; import com.fzm.common.annotation.Authentication;
import com.fzm.common.constant.RedisConstant; import com.fzm.common.constant.RedisConstant;
import com.fzm.common.constant.TokenConstant; import com.fzm.common.constant.TokenConstant;
import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.User; import com.fzm.common.entity.User;
import com.fzm.common.enums.ResultCode; import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException; import com.fzm.common.exception.GlobalException;
...@@ -11,7 +10,7 @@ import com.fzm.common.model.ResponseModel; ...@@ -11,7 +10,7 @@ import com.fzm.common.model.ResponseModel;
import com.fzm.common.params.LoginParam; import com.fzm.common.params.LoginParam;
import com.fzm.common.service.UserService; import com.fzm.common.service.UserService;
import com.fzm.common.utils.JwtUtil; import com.fzm.common.utils.JwtUtil;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.ObsUtil;
import com.fzm.common.utils.RedisUtil; import com.fzm.common.utils.RedisUtil;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse; import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -41,7 +40,7 @@ public class UserController { ...@@ -41,7 +40,7 @@ public class UserController {
private UserService userService; private UserService userService;
@Resource @Resource
private OssUtil ossUtil; private ObsUtil obsUtil;
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
...@@ -111,7 +110,7 @@ public class UserController { ...@@ -111,7 +110,7 @@ public class UserController {
@ApiOperation(value = "上传头像") @ApiOperation(value = "上传头像")
@PostMapping("/upload/avatar") @PostMapping("/upload/avatar")
public ResponseModel<User> uploadAvatar(MultipartFile file) throws IOException { public ResponseModel<User> uploadAvatar(MultipartFile file) throws IOException {
String avatar = ossUtil.putSimpleObject(file); String avatar = obsUtil.putObject(file);
User user = userService.uploadAvatar(avatar); User user = userService.uploadAvatar(avatar);
return ResponseModel.success(user); return ResponseModel.success(user);
} }
......
...@@ -93,3 +93,9 @@ aliyun: ...@@ -93,3 +93,9 @@ aliyun:
end-point: oss-cn-hangzhou.aliyuncs.com end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft simple-bucket: test-nft
encrypt-bucket: test-nft-2 encrypt-bucket: test-nft-2
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -105,3 +105,10 @@ aliyun: ...@@ -105,3 +105,10 @@ aliyun:
end-point: oss-cn-hangzhou.aliyuncs.com end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft simple-bucket: test-nft
encrypt-bucket: test-nft-2 encrypt-bucket: test-nft-2
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -107,3 +107,10 @@ aliyun: ...@@ -107,3 +107,10 @@ aliyun:
end-point: oss-cn-hangzhou.aliyuncs.com end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft simple-bucket: test-nft
encrypt-bucket: test-nft-2 encrypt-bucket: test-nft-2
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -93,3 +93,10 @@ aliyun: ...@@ -93,3 +93,10 @@ aliyun:
end-point: oss-cn-shanghai.aliyuncs.com end-point: oss-cn-shanghai.aliyuncs.com
simple-bucket: joying-file simple-bucket: joying-file
encrypt-bucket: joying-nft encrypt-bucket: joying-nft
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -102,3 +102,10 @@ aliyun: ...@@ -102,3 +102,10 @@ aliyun:
end-point: oss-cn-hangzhou.aliyuncs.com end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft simple-bucket: test-nft
encrypt-bucket: test-nft-2 encrypt-bucket: test-nft-2
huaweiyun:
obs:
app-key: HIULSHJZJOTWB72Z38ZB
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file
\ No newline at end of file
...@@ -79,13 +79,13 @@ public class NftEvm { ...@@ -79,13 +79,13 @@ public class NftEvm {
long balance = ra.evmBalance(abi, cAddr, EvmTokenEnum.ERC1155, publisher, tokenId);*/ long balance = ra.evmBalance(abi, cAddr, EvmTokenEnum.ERC1155, publisher, tokenId);*/
//============================================================================================= //=============================================================================================
//long tokenId = Instant.now().getEpochSecond(); long tokenId = Instant.now().getEpochSecond();
// long tokenId = 1640828944; // long tokenId = 1640828944;
// String hash = ra.evmSetTokenInfo(abi, cAddr, 0L, tokenId, "publishAddress=143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm&synopsis=呵呵呵", "143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm", null, true); String hash = ra.evmSetTokenInfo(abi, cAddr, 0L, tokenId, "author=213&copyrightOwner=123sassafras&evidencer=湖北版权局&hash=d59a9c995aa17b862ccce38c9f77e7bd&opusName=卡卡打开&opusType=录像制品(电影作品和以类似摄制电影的方法创作的作品以外的任何有伴音或无伴音的连续相关形象、图像的制品)&publishAddress=171Urr3LubNKfaWLN5jcVyfnsWMDfbdAGe&registerCode=&synopsis=123", "143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm", null, true);
// System.out.println("hash = " + hash); System.out.println("hash = " + hash);
// System.out.println("tokenId = " + tokenId); System.out.println("tokenId = " + tokenId);
// TimeUnit.SECONDS.sleep(10); TimeUnit.SECONDS.sleep(10);
String result = ra.evmGetTokenInfo(abi, cAddr, 1640675959, "19uiPBDu6jh39y7J3Xa7vFcF141RWQAkd1"); String result = ra.evmGetTokenInfo(abi, cAddr, tokenId, "19uiPBDu6jh39y7J3Xa7vFcF141RWQAkd1");
System.out.println(result); System.out.println(result);
// String realTxHashFromGrp = ra.getRealTxHashFromGrp("0x2061e977daee520629ac8757763249855e2cf5b408276a8253a81b4e9b9cba7b"); // String realTxHashFromGrp = ra.getRealTxHashFromGrp("0x2061e977daee520629ac8757763249855e2cf5b408276a8253a81b4e9b9cba7b");
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -241,37 +241,40 @@ CREATE TABLE `tb_commemorate_nft` ( ...@@ -241,37 +241,40 @@ CREATE TABLE `tb_commemorate_nft` (
DROP TABLE IF EXISTS `tb_copyright_apply`; DROP TABLE IF EXISTS `tb_copyright_apply`;
CREATE TABLE `tb_copyright_apply` ( CREATE TABLE `tb_copyright_apply` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`serial_num` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '流水号', `serial_num` varchar(32) NOT NULL DEFAULT '' COMMENT '流水号',
`user_id` int(11) NOT NULL COMMENT '用户id', `user_id` int(11) NOT NULL COMMENT '用户id',
`nft_hash` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'nft哈希', `nft_hash` varchar(256) NOT NULL DEFAULT '' COMMENT 'nft哈希',
`nft_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'nft名称', `nft_name` varchar(128) NOT NULL DEFAULT '' COMMENT 'nft名称',
`register_entrust` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '登记委托书', `register_entrust` varchar(255) NOT NULL DEFAULT '' COMMENT '登记委托书',
`opus_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '作品名称', `opus_name` varchar(64) NOT NULL DEFAULT '' COMMENT '作品名称',
`opus_category_id` int(11) NOT NULL COMMENT '作品类别id', `opus_category_id` int(11) NOT NULL COMMENT '作品类别id',
`opus_property` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '作品性质', `opus_property` varchar(16) NOT NULL DEFAULT '' COMMENT '作品性质',
`content_synopsis` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '内容简介', `content_synopsis` varchar(1024) NOT NULL DEFAULT '' COMMENT '内容简介',
`create_process` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '创作过程', `create_process` varchar(255) NOT NULL DEFAULT '' COMMENT '创作过程',
`opus_complete_date` date NOT NULL COMMENT '作品完成日期', `opus_complete_date` date NOT NULL COMMENT '作品完成日期',
`opus_complete_province` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '作品完成省份', `opus_complete_province` varchar(8) NOT NULL DEFAULT '' COMMENT '作品完成省份',
`opus_complete_city` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '作品完成城市', `opus_complete_city` varchar(8) NOT NULL COMMENT '作品完成城市',
`publish_state` tinyint(1) NOT NULL DEFAULT 0 COMMENT '发表状态 0-未发表 1-已发表', `publish_state` tinyint(1) NOT NULL DEFAULT '0' COMMENT '发表状态 0-未发表 1-已发表',
`first_publish_date` date NULL DEFAULT NULL COMMENT '首次发表日期', `first_publish_date` date DEFAULT NULL COMMENT '首次发表日期',
`first_publish_province` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '首次发表省份', `first_publish_province` varchar(8) DEFAULT NULL COMMENT '首次发表省份',
`first_publish_city` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '首次发表城市', `first_publish_city` varchar(8) DEFAULT NULL COMMENT '首次发表城市',
`authority_acquire_mode` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力取得方式', `authority_acquire_mode` varchar(8) NOT NULL DEFAULT '' COMMENT '权力取得方式',
`authority_acquire_prove` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力取得证明材料', `authority_acquire_prove` varchar(255) NOT NULL DEFAULT '' COMMENT '权力取得证明材料',
`authority_ascription_mode` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力归属方式', `authority_ascription_mode` varchar(8) NOT NULL DEFAULT '' COMMENT '权力归属方式',
`authority_ascription_prove` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力归属证明材料', `authority_ascription_prove` varchar(255) NOT NULL DEFAULT '' COMMENT '权力归属证明材料',
`opus_power_guarantee` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '作品权力保证书', `opus_power_guarantee` varchar(255) NOT NULL COMMENT '作品权力保证书',
`apply_time` datetime(0) NOT NULL COMMENT '申请时间', `apply_time` datetime NOT NULL COMMENT '申请时间',
`register_state` tinyint(1) NOT NULL DEFAULT 0 COMMENT '登记状态 -1:已撤回 0:待审核 2:已提交 3:已驳回 4:登记成功 5:审核失败', `register_state` tinyint(1) NOT NULL DEFAULT '0' COMMENT '登记状态 -1:已撤回 0:待审核 2:已提交 3:已驳回 4:登记成功 5:审核失败',
`reject_reason` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '驳回原因', `evidence_hash` varchar(128) NOT NULL DEFAULT '' COMMENT '存证哈希',
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'json', `evidence_date` date DEFAULT NULL COMMENT '存证日期',
`create_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, `reject_reason` varchar(512) NOT NULL DEFAULT '' COMMENT '驳回原因',
`update_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0), `content` text COMMENT 'json',
PRIMARY KEY (`id`) USING BTREE `register_code` varchar(255) NOT NULL DEFAULT '' COMMENT '登记证书编号,在版权登记审核通过后生成',
) ENGINE = InnoDB AUTO_INCREMENT = 65 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '版权申请表' ROW_FORMAT = Dynamic; `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `idx_nfthash` (`nft_hash`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '版权申请表' ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Table structure for tb_copyright_apply_owner_relation -- Table structure for tb_copyright_apply_owner_relation
-- ---------------------------- -- ----------------------------
...@@ -466,6 +469,24 @@ CREATE TABLE `tb_opus_category` ( ...@@ -466,6 +469,24 @@ CREATE TABLE `tb_opus_category` (
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '作品类别' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '作品类别' ROW_FORMAT = Dynamic;
INSERT INTO `tb_opus_category` VALUES (1, '文字作品(小说、论文、剧本、商业计划书、歌词等)');
INSERT INTO `tb_opus_category` VALUES (2, '口述作品(即兴的演说、授课、法庭辩论等)');
INSERT INTO `tb_opus_category` VALUES (3, '音乐作品(词曲、器乐等)');
INSERT INTO `tb_opus_category` VALUES (4, '戏剧作品(话剧、歌剧、地方戏剧、广播剧等)');
INSERT INTO `tb_opus_category` VALUES (5, '曲艺作品(相声、大鼓、快书、评书等)');
INSERT INTO `tb_opus_category` VALUES (6, '舞蹈作品(现代舞、民族舞、中国古典舞、爵士舞、肚皮舞、钢管舞等)');
INSERT INTO `tb_opus_category` VALUES (7, '杂技艺术(柔术、顶碗、走钢丝、变戏法、舞狮子、车技等)');
INSERT INTO `tb_opus_category` VALUES (8, '美术作品(包装图、效果图、玩具、商标标识、漫画、雕塑等)');
INSERT INTO `tb_opus_category` VALUES (9, '建筑作品(民用建筑、工业建筑、农业建筑、公共建筑等)');
INSERT INTO `tb_opus_category` VALUES (10, '摄影作品(人像摄影、记录摄影、艺术摄影、全息摄影、全景摄影、商业摄影等)');
INSERT INTO `tb_opus_category` VALUES (11, '电影作品(纪录片、动画电影、动作电影、科幻电影、悬疑电影等)');
INSERT INTO `tb_opus_category` VALUES (12, '以类似摄制电影的方法创作的作品(短片、录像、短视频、电视剧、动画片等)');
INSERT INTO `tb_opus_category` VALUES (13, '工程设计图、产品设计图(平面设计图、立面图、剖面图、施工图、工业设计图纸、服装设计图纸等)');
INSERT INTO `tb_opus_category` VALUES (14, '地图、示意图(地图、桌面图、立体图)');
INSERT INTO `tb_opus_category` VALUES (15, '模型作品(立体模型)');
INSERT INTO `tb_opus_category` VALUES (16, '录音制品(任何对表演的声音和其他声音的录制品)');
INSERT INTO `tb_opus_category` VALUES (17, '录像制品(电影作品和以类似摄制电影的方法创作的作品以外的任何有伴音或无伴音的连续相关形象、图像的制品)');
INSERT INTO `tb_opus_category` VALUES (18, '其他作品(法律、行政法律规定的其他作品等)');
-- ---------------------------- -- ----------------------------
-- Table structure for tb_user -- Table structure for tb_user
-- ---------------------------- -- ----------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment