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;
import com.fzm.common.entity.dto.CopyrightQueryResponse;
import com.fzm.common.entity.vo.NftVo;
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.service.CopyrightApplyService;
import com.fzm.common.service.NftService;
import com.fzm.common.utils.CopyrightSignUtil;
import com.fzm.common.utils.JsonUtil;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ExecutionException;
/**
* @author tangtuo
......@@ -63,8 +65,9 @@ public class CopyrightLister {
* @param serial_code
*/
@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);
long deliveryTag = message.getMessageProperties().getDeliveryTag();
CopyrightQueryRequest request = new CopyrightQueryRequest(serial_code, copyrightProperties.getAppId());
TreeMap<String, String> map = this.beanToMap(request, copyrightProperties.getAppSecret());
String sign = CopyrightSignUtil.generateSign(map);
......@@ -74,15 +77,28 @@ public class CopyrightLister {
String response = HttpUtil.post(copyrightProperties.getQueryUrl(), json, 10000);
log.info("查询审核结果接口响应内容: {}", 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) {
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()) {
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:审核通过)
if (!copyrightResponse.getAudit_status().equals(3) && !copyrightResponse.getAudit_status().equals(6)) {
// 审核中, 需要把当前流水号丢进死信队列, 6小时后再去查询
......@@ -92,22 +108,36 @@ public class CopyrightLister {
if (copyrightResponse.getAudit_status().equals(6)) {
// 审核成功
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);
String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), nft.getPublishAddress());
NftVo detail = nftService.getDetail(nftHash);
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);
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 {
// 审核失败
copyrightApply.setRegisterState(CopyrightApplyState.FAILED.getCode());
}
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) {
......@@ -118,20 +148,46 @@ public class CopyrightLister {
}
private String appendTokenInfo(String tokenInfo, NftVo.Copyright copyright) {
StringBuilder stringBuilder = new StringBuilder(tokenInfo);
stringBuilder.append("&").
append("evidencer").append("=").append(copyright.getEvidencer()).append("&").
append("opusName").append("=").append(copyright.getOpusName()).append("&").
append("opusType").append("=").append(copyright.getOpusType()).append("&").
append("author").append("=").append(copyright.getAuthor()).append("&").
append("copyrightOwner").append("=").append(copyright.getCopyrightOwner()).append("&").
append("registerCode").append("=").append(copyright.getRegisterCode());
return stringBuilder.toString();
String[] split = tokenInfo.split("&");
TreeMap<String, String> map = new TreeMap<>();
for (String s : split) {
String[] arr = s.split("=");
String key = arr[0];
String value;
if (arr.length < 2) {
value = "";
} 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) {
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);
System.out.println(response);
// 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);
// 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:
password: admin
listener:
simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
acknowledge-mode: manual #acknowledge-mode: none,关闭ack; manual,手动ack; auto:自动ack
swagger:
title: 乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API
......@@ -96,4 +96,9 @@ copyright:
app-id: 289391457858
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:
password: admin
listener:
simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
acknowledge-mode: manual #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
swagger:
title: 乐映影视乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API
......@@ -97,3 +97,9 @@ copyright:
app-id: 289391457858
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:
password: guest
listener:
simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
acknowledge-mode: manual #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
swagger:
title: 乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API
......@@ -98,4 +98,9 @@ copyright:
app-id: 289391457858
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:
redis:
# 缓存失效时间
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:
title: 乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API
......@@ -83,7 +91,14 @@ aliyun:
encrypt-bucket: joying-nft
copyright:
url: https://p.yareiot.com/ccct/ccct/api/copyright/create
app-id: 289391457858
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:
password: admin
listener:
simple:
acknowledge-mode: auto #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
acknowledge-mode: manual #acknowledge-mode: none,关闭ack;manual,手动ack;auto:自动ack
swagger:
title: 乐映影视乐映影视后台管理系统
description: 乐映影视后台管理系统RESTFUL API
......@@ -95,3 +95,9 @@ copyright:
app-id: 289391457858
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 @@
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.322</version>
</dependency>
<dependency>
<groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java</artifactId>
<version>3.20.6.1</version>
</dependency>
</dependencies>
<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 {
@Bean
public Queue dlQueue() {
return QueueBuilder.durable(DEAD_LETTER_QUEUE)
.ttl(1000 * 60 * 2)
.ttl(1000 * 60 * 60 * 6)
.deadLetterExchange(DEAD_LETTER_DIRECT)
.deadLetterRoutingKey("copyright.notify")
.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;
import com.fzm.common.properties.CopyrightProperties;
import com.fzm.common.service.*;
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.PageInfo;
import lombok.extern.slf4j.Slf4j;
......@@ -77,7 +77,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
private NftService nftService;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@Resource
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
......@@ -183,11 +183,11 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
}
// 删除权力取得方式的附件
if (StringUtils.isNotBlank(copyright.getAuthorityAcquireMode())) {
ossUtil.delete(copyright.getAuthorityAcquireMode());
obsUtil.delete(copyright.getAuthorityAcquireMode());
}
// 删除权力归属证明附件
if (StringUtils.isNotBlank(copyright.getAuthorityAscriptionMode())) {
ossUtil.delete(copyright.getAuthorityAcquireMode());
obsUtil.delete(copyright.getAuthorityAcquireMode());
}
// 删除附件列表
copyrightFileService.delByCopyrightId(id);
......
......@@ -2,12 +2,11 @@ package com.fzm.common.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.fzm.common.entity.CopyrightFile;
import com.fzm.common.mapper.CopyrightFileMapper;
import com.fzm.common.service.CopyrightFileService;
import com.fzm.common.utils.OssUtil;
import com.fzm.common.utils.ObsUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
......@@ -24,7 +23,7 @@ public class CopyrightFileServiceImpl extends ServiceImpl<CopyrightFileMapper, C
private CopyrightFileMapper copyrightFileMapper;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@Override
......@@ -38,7 +37,7 @@ public class CopyrightFileServiceImpl extends ServiceImpl<CopyrightFileMapper, C
public Integer delByCopyrightId(Integer copyrightId) {
List<CopyrightFile> list = getByCopyrightId(copyrightId);
for (CopyrightFile file : list) {
ossUtil.delete(file.getFileUrl());
obsUtil.delete(file.getFileUrl());
}
UpdateWrapper<CopyrightFile> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("copyright_id", copyrightId);
......
......@@ -14,7 +14,7 @@ import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.mapper.DraftMapper;
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.springframework.stereotype.Service;
......@@ -32,7 +32,7 @@ public class DraftServiceImpl extends ServiceImpl<DraftMapper, Draft> implements
private DraftMapper draftMapper;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@Resource
private CopyrightApplyService copyrightApplyService;
......@@ -63,17 +63,17 @@ public class DraftServiceImpl extends ServiceImpl<DraftMapper, Draft> implements
if (copyrightDTO != null) {
// 删除权力取得方式的附件权力
if (StringUtils.isNotBlank(copyrightDTO.getAuthorityAcquireMode())) {
ossUtil.delete(copyrightDTO.getAuthorityAcquireMode());
obsUtil.delete(copyrightDTO.getAuthorityAcquireMode());
}
// 删除权力归属证明附件
if (StringUtils.isNotBlank(copyrightDTO.getAuthorityAscriptionMode())) {
ossUtil.delete(copyrightDTO.getAuthorityAcquireMode());
obsUtil.delete(copyrightDTO.getAuthorityAcquireMode());
}
// 删除文件列表
if (CollectionUtil.isNotEmpty(copyrightDTO.getFiles())) {
for (CopyrightDTO.File file : copyrightDTO.getFiles()) {
if (StringUtils.isNotBlank(file.getFileUrl())) {
ossUtil.delete(file.getFileUrl());
obsUtil.delete(file.getFileUrl());
}
}
}
......
......@@ -26,7 +26,7 @@ import com.fzm.common.params.NftTransferParam;
import com.fzm.common.properties.SmsProperties;
import com.fzm.common.service.*;
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.SmsUtil;
import com.github.pagehelper.PageHelper;
......@@ -77,7 +77,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
private NftTransferRecordService nftTransferRecordService;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@Resource
private SmsUtil smsUtil;
......@@ -392,7 +392,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
if (nft == null) {
throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft详情");
}
ossUtil.downloadFile(nft.getFileUrl(), nft.getFileName());
obsUtil.downloadFile(nft.getFileUrl(), nft.getFileName());
}
private long getTokenId() {
......
......@@ -82,7 +82,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private HttpServletRequest request;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@Resource
private OssProperties ossProperties;
......@@ -182,7 +182,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
User loginUser = getUserByToken();
// 如果不是第一次上传头像,需要删除旧头像
if (StringUtils.isNotBlank(loginUser.getAvatar())) {
ossUtil.delete(loginUser.getAvatar());
obsUtil.delete(loginUser.getAvatar());
}
User user = new User().
setAvatar(avatar).
......@@ -238,8 +238,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
Integer status;
if (IdCardVerificationResponse.SUCCESS.getCode().equals(response.getResult())) {
// 验证成功上传身份证证件
String frontUrl = ossUtil.putSimpleObject(cardPictureFront);
String backUrl = ossUtil.putSimpleObject(cardPictureBack);
String frontUrl = obsUtil.putObject(cardPictureFront);
String backUrl = obsUtil.putObject(cardPictureBack);
AuthPerson authPerson = new AuthPerson()
.setUserId(userId)
.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;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.*;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.properties.OssProperties;
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;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author tangtuo
* @date 2021/6/29 16:07
*/
@Slf4j
@Component
public class OssUtil {
@Resource
private OssProperties ossProperties;
@Resource
private HttpServletResponse response;
/**
* @param file
* @return
*/
public String putObject(MultipartFile file, String bucket) throws IOException {
String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret();
// <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。
String objectName = String.format("%s/%s/%s", DateUtil.format(new Date(), "yyyyMMdd"), IdUtil.simpleUUID(), file.getOriginalFilename());
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucket, objectName, file.getInputStream());
// 关闭OSSClient。
ossClient.shutdown();
return String.format("https://%s.%s/%s", bucket, endpoint, objectName);
}
/**
* 文件普通存储
*
* @param file
* @return
* @throws IOException
*/
public String putSimpleObject(MultipartFile file) throws IOException {
return putObject(file, ossProperties.getSimpleBucket());
}
/**
* 文件加密存储
*
* @param file
* @return
* @throws IOException
*/
public String putEncryptObject(MultipartFile file) throws IOException {
return putObject(file, ossProperties.getEncryptBucket());
}
public void createEncryptBucket() {
String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret();
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 创建存储空间。
String bucket = ossProperties.getEncryptBucket();
if (!ossClient.doesBucketExist(bucket)) {
// 设置Bucket加密。
ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.AES256);
ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration();
sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault);
SetBucketEncryptionRequest request = new SetBucketEncryptionRequest("<yourBucketName>", sseConfig);
ossClient.setBucketEncryption(request);
ossClient.shutdown();
ossClient.createBucket(bucket);
}
ossClient.createBucket(ossProperties.getEncryptBucket());
}
/**
* @param fileUrl 文件地址
* @param fileName 文件名
*/
public void downloadFile(String fileUrl, String fileName) {
String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret();
String bucketName = ossProperties.getEncryptBucket();
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());
}
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
fileUrl = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), "");
OSSObject ossObject = ossClient.getObject(bucketName, fileUrl);
try {
// 读取文件内容。
InputStream inputStream = ossObject.getObjectContent();
BufferedInputStream in = new BufferedInputStream(inputStream);// 把输入流放入缓存流
ServletOutputStream outputStream = response.getOutputStream();
BufferedOutputStream out = new BufferedOutputStream(outputStream);// 把输出流放入缓存流
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
if (out != null) {
out.flush();
out.close();
}
if (in != null) {
in.close();
}
ossClient.shutdown();
} catch (Exception e) {
log.error(e.getMessage(), e);
throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage());
}
}
public Map<String, String> policy() {
String accessId = ossProperties.getAppKey(); // 请填写您的AccessKeyId。
String accessKey = ossProperties.getAppSecret(); // 请填写您的AccessKeySecret。
String endpoint = ossProperties.getEndPoint(); // 请填写您的 endpoint。
String bucket = ossProperties.getEncryptBucket(); // 请填写您的 bucketname 。
String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
String dir = DateUtil.format(new Date(), "yyyyMMdd") + "/" + IdUtil.simpleUUID() + "/";
Map<String, String> respMap = new LinkedHashMap<>();
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
try {
long expireTime = 120;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime);
// PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
PolicyConditions policyConds = new PolicyConditions();
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = ossClient.calculatePostSignature(postPolicy);
respMap.put("accessid", accessId);
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", dir);
respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000));
return respMap;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, e.getMessage());
}
}
public void delete(String fileUrl) {
String bucketName = ossProperties.getSimpleBucket();
String endpoint = ossProperties.getEndPoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = ossProperties.getAppKey();
String accessKeySecret = ossProperties.getAppSecret();
// <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。
String objectName = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), "");
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.deleteObject(bucketName, objectName);
}
public static void main(String[] args) {
String endpoint = "oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "LTAI5tHGn7cVJdEtihTFLSeB";
String accessKeySecret = "XYmfBSbLaZoblGXZwIXkbhfBD7a1eg";
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
String bucket2 = "joying-nft";
ossClient.deleteObject("test-nft", "20210913/ff8e541497d1482895be1f038bb0430e/微信图片_20210913144401.jpg");
}
}
//package com.fzm.common.utils;
//
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.IdUtil;
//import com.aliyun.oss.OSS;
//import com.aliyun.oss.OSSClientBuilder;
//import com.aliyun.oss.common.utils.BinaryUtil;
//import com.aliyun.oss.model.*;
//import com.fzm.common.enums.ResultCode;
//import com.fzm.common.exception.GlobalException;
//import com.fzm.common.properties.OssProperties;
//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;
//import java.util.Date;
//import java.util.LinkedHashMap;
//import java.util.Map;
//
///**
// * @author tangtuo
// * @date 2021/6/29 16:07
// */
//@Slf4j
//@Component
//public class OssUtil {
//
// @Resource
// private OssProperties ossProperties;
//
// @Resource
// private HttpServletResponse response;
//
// /**
// * @param file
// * @return
// */
// public String putObject(MultipartFile file, String bucket) throws IOException {
// String endpoint = ossProperties.getEndPoint();
// // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
// String accessKeyId = ossProperties.getAppKey();
// String accessKeySecret = ossProperties.getAppSecret();
// // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。
// String objectName = String.format("%s/%s/%s", DateUtil.format(new Date(), "yyyyMMdd"), IdUtil.simpleUUID(), file.getOriginalFilename());
//
// // 创建OSSClient实例。
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// ossClient.putObject(bucket, objectName, file.getInputStream());
//
// // 关闭OSSClient。
// ossClient.shutdown();
// return String.format("https://%s.%s/%s", bucket, endpoint, objectName);
// }
//
// /**
// * 文件普通存储
// *
// * @param file
// * @return
// * @throws IOException
// */
// public String putSimpleObject(MultipartFile file) throws IOException {
// return putObject(file, ossProperties.getSimpleBucket());
// }
//
// /**
// * 文件加密存储
// *
// * @param file
// * @return
// * @throws IOException
// */
// public String putEncryptObject(MultipartFile file) throws IOException {
// return putObject(file, ossProperties.getEncryptBucket());
// }
//
// public void createEncryptBucket() {
// String endpoint = ossProperties.getEndPoint();
// // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
// String accessKeyId = ossProperties.getAppKey();
// String accessKeySecret = ossProperties.getAppSecret();
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//
// // 创建存储空间。
// String bucket = ossProperties.getEncryptBucket();
// if (!ossClient.doesBucketExist(bucket)) {
// // 设置Bucket加密。
// ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.AES256);
// ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration();
// sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault);
// SetBucketEncryptionRequest request = new SetBucketEncryptionRequest("<yourBucketName>", sseConfig);
// ossClient.setBucketEncryption(request);
// ossClient.shutdown();
// ossClient.createBucket(bucket);
// }
// ossClient.createBucket(ossProperties.getEncryptBucket());
// }
//
//
// /**
// * @param fileUrl 文件地址
// * @param fileName 文件名
// */
// public void downloadFile(String fileUrl, String fileName) {
// String endpoint = ossProperties.getEndPoint();
// // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
// String accessKeyId = ossProperties.getAppKey();
// String accessKeySecret = ossProperties.getAppSecret();
// String bucketName = ossProperties.getEncryptBucket();
// 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());
// }
// // 创建OSSClient实例。
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
// fileUrl = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), "");
// OSSObject ossObject = ossClient.getObject(bucketName, fileUrl);
// try {
// // 读取文件内容。
// InputStream inputStream = ossObject.getObjectContent();
// BufferedInputStream in = new BufferedInputStream(inputStream);// 把输入流放入缓存流
// ServletOutputStream outputStream = response.getOutputStream();
// BufferedOutputStream out = new BufferedOutputStream(outputStream);// 把输出流放入缓存流
// byte[] buffer = new byte[1024];
// int len = 0;
// while ((len = in.read(buffer)) != -1) {
// out.write(buffer, 0, len);
// }
// if (out != null) {
// out.flush();
// out.close();
// }
// if (in != null) {
// in.close();
// }
// ossClient.shutdown();
// } catch (Exception e) {
// log.error(e.getMessage(), e);
// throw GlobalException.newException(ResultCode.FILE_DOWNLOAD_ERROR, e.getMessage());
// }
//
// }
//
// public Map<String, String> policy() {
// String accessId = ossProperties.getAppKey(); // 请填写您的AccessKeyId。
// String accessKey = ossProperties.getAppSecret(); // 请填写您的AccessKeySecret。
// String endpoint = ossProperties.getEndPoint(); // 请填写您的 endpoint。
// String bucket = ossProperties.getEncryptBucket(); // 请填写您的 bucketname 。
// String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
// String dir = DateUtil.format(new Date(), "yyyyMMdd") + "/" + IdUtil.simpleUUID() + "/";
// Map<String, String> respMap = new LinkedHashMap<>();
// // 创建OSSClient实例。
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
// try {
// long expireTime = 120;
// long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
// Date expiration = new Date(expireEndTime);
// // PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
// PolicyConditions policyConds = new PolicyConditions();
// policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
// policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
// String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
// byte[] binaryData = postPolicy.getBytes("utf-8");
// String encodedPolicy = BinaryUtil.toBase64String(binaryData);
// String postSignature = ossClient.calculatePostSignature(postPolicy);
// respMap.put("accessid", accessId);
// respMap.put("policy", encodedPolicy);
// respMap.put("signature", postSignature);
// respMap.put("dir", dir);
// respMap.put("host", host);
// respMap.put("expire", String.valueOf(expireEndTime / 1000));
// return respMap;
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, e.getMessage());
// }
// }
//
// public void delete(String fileUrl) {
// String bucketName = ossProperties.getSimpleBucket();
// String endpoint = ossProperties.getEndPoint();
// // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
// String accessKeyId = ossProperties.getAppKey();
// String accessKeySecret = ossProperties.getAppSecret();
// // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如20210629/a8703bcf7d354ea2bbb5ccdf76b7405f/123.jpg。
// String objectName = fileUrl.replace(String.format("https://%s.%s/", bucketName, endpoint), "");
// // 创建OSSClient实例。
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// ossClient.deleteObject(bucketName, objectName);
// }
//
//
// public static void main(String[] args) {
// String endpoint = "oss-cn-hangzhou.aliyuncs.com";
// // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
// String accessKeyId = "LTAI5tHGn7cVJdEtihTFLSeB";
// String accessKeySecret = "XYmfBSbLaZoblGXZwIXkbhfBD7a1eg";
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//
// String bucket2 = "joying-nft";
// ossClient.deleteObject("test-nft", "20210913/ff8e541497d1482895be1f038bb0430e/微信图片_20210913144401.jpg");
// }
//
//
//}
......@@ -13,7 +13,7 @@ import com.fzm.common.service.CategoryService;
import com.fzm.common.service.CommemorateNftService;
import com.fzm.common.service.UserService;
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -41,7 +41,7 @@ public class CommemorateNftController {
private CommemorateNftService commemorateNftService;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@Resource
private UserService userService;
......@@ -71,8 +71,8 @@ public class CommemorateNftController {
if (!coverName.endsWith(".png") && !coverName.endsWith(".jpg")) {
throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, "封面类型有误");
}
String fileUrl = ossUtil.putSimpleObject(file);
String coverUrl = ossUtil.putSimpleObject(cover);
String fileUrl = obsUtil.putObject(file);
String coverUrl = obsUtil.putObject(cover);
CommemorateNft commemorateNft = new CommemorateNft().
setName(name).
setCover(coverUrl).
......
......@@ -5,7 +5,7 @@ import com.fzm.common.enums.FileSuffix;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
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.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -29,7 +29,7 @@ public class CopyrightFileController {
private static final long maxSize = 1024 * 1024 * 200;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@PostMapping("/upload")
@ApiOperation(value = "上传版权申请附件")
......@@ -44,7 +44,7 @@ public class CopyrightFileController {
throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, "不支持当前上传的文件类型");
}
String url = ossUtil.putSimpleObject(file);
String url = obsUtil.putObject(file);
return ResponseModel.success(url);
}
}
package com.fzm.portal.controller;
import com.fasterxml.jackson.databind.deser.std.NumberDeserializers;
import com.fzm.common.annotation.Authentication;
import com.fzm.common.model.ResponseModel;
import com.fzm.common.utils.OssUtil;
import com.tencentcloudapi.tsf.v20180326.models.TaskRule;
import com.fzm.common.utils.ObsUtil;
import io.swagger.annotations.Api;
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 javax.annotation.Resource;
import java.io.IOException;
import java.util.Map;
/**
* @author tangtuo
......@@ -24,21 +24,14 @@ import java.util.Map;
public class OssController {
@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
@PostMapping("/upload")
@ApiOperation("普通文件上传")
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 {
@ApiOperation(value = "下载文件")
public void download(@RequestParam String fileUrl) {
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
ossUtil.downloadFile(fileUrl, fileName);
obsUtil.downloadFile(fileUrl, fileName);
}
......@@ -55,7 +48,6 @@ public class OssController {
@ApiOperation(value = "删除文件")
@PostMapping(value = "/delete")
public ResponseModel<Boolean> delete(String fileUrl) {
ossUtil.delete(fileUrl);
return ResponseModel.success(true);
return ResponseModel.success(obsUtil.delete(fileUrl));
}
}
......@@ -3,7 +3,6 @@ package com.fzm.portal.controller;
import com.fzm.common.annotation.Authentication;
import com.fzm.common.constant.RedisConstant;
import com.fzm.common.constant.TokenConstant;
import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.User;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
......@@ -11,7 +10,7 @@ import com.fzm.common.model.ResponseModel;
import com.fzm.common.params.LoginParam;
import com.fzm.common.service.UserService;
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.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse;
import io.swagger.annotations.Api;
......@@ -41,7 +40,7 @@ public class UserController {
private UserService userService;
@Resource
private OssUtil ossUtil;
private ObsUtil obsUtil;
@Resource
private RedisUtil redisUtil;
......@@ -111,7 +110,7 @@ public class UserController {
@ApiOperation(value = "上传头像")
@PostMapping("/upload/avatar")
public ResponseModel<User> uploadAvatar(MultipartFile file) throws IOException {
String avatar = ossUtil.putSimpleObject(file);
String avatar = obsUtil.putObject(file);
User user = userService.uploadAvatar(avatar);
return ResponseModel.success(user);
}
......
......@@ -93,3 +93,9 @@ aliyun:
end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft
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:
end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft
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:
end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft
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:
end-point: oss-cn-shanghai.aliyuncs.com
simple-bucket: joying-file
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:
end-point: oss-cn-hangzhou.aliyuncs.com
simple-bucket: test-nft
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 {
long balance = ra.evmBalance(abi, cAddr, EvmTokenEnum.ERC1155, publisher, tokenId);*/
//=============================================================================================
//long tokenId = Instant.now().getEpochSecond();
long tokenId = Instant.now().getEpochSecond();
// long tokenId = 1640828944;
// String hash = ra.evmSetTokenInfo(abi, cAddr, 0L, tokenId, "publishAddress=143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm&synopsis=呵呵呵", "143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm", null, true);
// System.out.println("hash = " + hash);
// System.out.println("tokenId = " + tokenId);
// TimeUnit.SECONDS.sleep(10);
String result = ra.evmGetTokenInfo(abi, cAddr, 1640675959, "19uiPBDu6jh39y7J3Xa7vFcF141RWQAkd1");
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("tokenId = " + tokenId);
TimeUnit.SECONDS.sleep(10);
String result = ra.evmGetTokenInfo(abi, cAddr, tokenId, "19uiPBDu6jh39y7J3Xa7vFcF141RWQAkd1");
System.out.println(result);
// 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` (
DROP TABLE IF EXISTS `tb_copyright_apply`;
CREATE TABLE `tb_copyright_apply` (
`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',
`nft_hash` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'nft哈希',
`nft_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'nft名称',
`register_entrust` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '登记委托书',
`opus_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '作品名称',
`nft_hash` varchar(256) NOT NULL DEFAULT '' COMMENT 'nft哈希',
`nft_name` varchar(128) NOT NULL DEFAULT '' COMMENT 'nft名称',
`register_entrust` varchar(255) NOT NULL DEFAULT '' COMMENT '登记委托书',
`opus_name` varchar(64) NOT NULL DEFAULT '' COMMENT '作品名称',
`opus_category_id` int(11) NOT NULL COMMENT '作品类别id',
`opus_property` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '作品性质',
`content_synopsis` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '内容简介',
`create_process` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '创作过程',
`opus_property` varchar(16) NOT NULL DEFAULT '' COMMENT '作品性质',
`content_synopsis` varchar(1024) NOT NULL DEFAULT '' COMMENT '内容简介',
`create_process` varchar(255) NOT NULL DEFAULT '' 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_city` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '作品完成城市',
`publish_state` tinyint(1) NOT NULL DEFAULT 0 COMMENT '发表状态 0-未发表 1-已发表',
`first_publish_date` date NULL DEFAULT NULL COMMENT '首次发表日期',
`first_publish_province` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '首次发表省份',
`first_publish_city` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '首次发表城市',
`authority_acquire_mode` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力取得方式',
`authority_acquire_prove` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力取得证明材料',
`authority_ascription_mode` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力归属方式',
`authority_ascription_prove` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权力归属证明材料',
`opus_power_guarantee` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '作品权力保证书',
`apply_time` datetime(0) NOT NULL COMMENT '申请时间',
`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 '驳回原因',
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'json',
`create_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 65 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '版权申请表' ROW_FORMAT = Dynamic;
`opus_complete_province` varchar(8) NOT NULL DEFAULT '' COMMENT '作品完成省份',
`opus_complete_city` varchar(8) NOT NULL COMMENT '作品完成城市',
`publish_state` tinyint(1) NOT NULL DEFAULT '0' COMMENT '发表状态 0-未发表 1-已发表',
`first_publish_date` date DEFAULT NULL COMMENT '首次发表日期',
`first_publish_province` varchar(8) DEFAULT NULL COMMENT '首次发表省份',
`first_publish_city` varchar(8) DEFAULT NULL COMMENT '首次发表城市',
`authority_acquire_mode` varchar(8) NOT NULL DEFAULT '' COMMENT '权力取得方式',
`authority_acquire_prove` varchar(255) NOT NULL DEFAULT '' COMMENT '权力取得证明材料',
`authority_ascription_mode` varchar(8) NOT NULL DEFAULT '' COMMENT '权力归属方式',
`authority_ascription_prove` varchar(255) NOT NULL DEFAULT '' COMMENT '权力归属证明材料',
`opus_power_guarantee` varchar(255) NOT NULL COMMENT '作品权力保证书',
`apply_time` datetime NOT NULL COMMENT '申请时间',
`register_state` tinyint(1) NOT NULL DEFAULT '0' COMMENT '登记状态 -1:已撤回 0:待审核 2:已提交 3:已驳回 4:登记成功 5:审核失败',
`evidence_hash` varchar(128) NOT NULL DEFAULT '' COMMENT '存证哈希',
`evidence_date` date DEFAULT NULL COMMENT '存证日期',
`reject_reason` varchar(512) NOT NULL DEFAULT '' COMMENT '驳回原因',
`content` text COMMENT 'json',
`register_code` varchar(255) NOT NULL DEFAULT '' COMMENT '登记证书编号,在版权登记审核通过后生成',
`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
-- ----------------------------
......@@ -466,6 +469,24 @@ CREATE TABLE `tb_opus_category` (
PRIMARY KEY (`id`) USING BTREE
) 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
-- ----------------------------
......
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