44323
2024-04-23 16b704d18a875d1fb63827aaa507790ba2bef5be
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
package com.stylefeng.guns.modular.system.util;
 
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.*;
import org.springframework.stereotype.Component;
 
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
public class UploadVideoUtil {
    public static String getUploadId(){
        // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。
        // String securityToken = System.getenv("SECURITY_TOKEN");
        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
        // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。
        //String endPoint = System.getenv("ENDPOINT");
        // 创建ObsClient实例
        // 使用永久AK/SK初始化客户端
        ObsClient obsClient = new ObsClient(ak, sk, endPoint);
        // 使用临时AK/SK和SecurityToken初始化客户端
        // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint);
        try {
            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("jkjianshen", "jk");
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.addUserMetadata("property", "property-value");
            metadata.setContentType("text/plain");
            request.setMetadata(metadata);
            InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request);
            String uploadId = result.getUploadId();
            System.out.println("initiateMultipartUpload successfully");
            System.out.println("uploadId:" + uploadId);
            return uploadId;
        } catch (ObsException e) {
            System.out.println("initiateMultipartUpload failed");
            // 请求失败,打印http状态码
            System.out.println("HTTP Code:" + e.getResponseCode());
            // 请求失败,打印服务端错误码
            System.out.println("Error Code:" + e.getErrorCode());
            // 请求失败,打印详细错误信息
            System.out.println("Error Message:" + e.getErrorMessage());
            // 请求失败,打印请求id
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("initiateMultipartUpload failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
        return null;
    }
    public static String uploadVideo(File file,String uploadId1){
// 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。
        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
        ObsClient obsClient = new ObsClient(ak, sk,endPoint);
        try {
            String uploadId = uploadId1;
            List<PartEtag> partEtags = new ArrayList<PartEtag>();
            // 上传第一段
            UploadPartRequest request = new UploadPartRequest("jkjianshen", "jk");
            // 设置Upload ID
            request.setUploadId(uploadId);
            // 设置分段号,范围是1~10000,
            request.setPartNumber(1);
            // 设置将要上传的大文件
            request.setFile(file);
            // 设置分段大小
            request.setPartSize(5 * 1024 * 1024L);
            UploadPartResult result = obsClient.uploadPart(request);
            partEtags.add(new PartEtag(result.getEtag(), result.getPartNumber()));
            // 上传第二段
            request = new UploadPartRequest("jkjianshen", "jk");
            // 设置Upload ID
            request.setUploadId(uploadId);
            // 设置分段号
            request.setPartNumber(2);
            // 设置将要上传的大文件
            request.setFile(file);
            // 设置第二段的段偏移量
            request.setOffset(5 * 1024 * 1024L);
            // 设置分段大小
            request.setPartSize(5 * 1024 * 1024L);
            result = obsClient.uploadPart(request);
            partEtags.add(new PartEtag(result.getEtag(), result.getPartNumber()));
            System.out.println("uploadPart successfully");
        } catch (ObsException e) {
            System.out.println("uploadPart failed");
            // 请求失败,打印http状态码
            System.out.println("HTTP Code:" + e.getResponseCode());
            // 请求失败,打印服务端错误码
            System.out.println("Error Code:" + e.getErrorCode());
            // 请求失败,打印详细错误信息
            System.out.println("Error Message:" + e.getErrorMessage());
            // 请求失败,打印请求id
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("uploadPart failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
        return null;
    }
    public static String compelete(String uploadId1){
        // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。
        String securityToken = System.getenv("SECURITY_TOKEN");
        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
        // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。
        //String endPoint = System.getenv("ENDPOINT");
 
        // 创建ObsClient实例
        // 使用永久AK/SK初始化客户端
        ObsClient obsClient = new ObsClient(ak, sk,endPoint);
        // 使用临时AK/SK和SecurityToken初始化客户端
        // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint);
 
        try {
            String uploadId = uploadId1;
            List<PartEtag> partEtags = new ArrayList<PartEtag>();
            // 第一段
            PartEtag part1 = new PartEtag();
            part1.setPartNumber(1);
            part1.seteTag("etag1");
            partEtags.add(part1);
            // 第二段
            PartEtag part2 = new PartEtag();
            part2.setPartNumber(2);
            part2.setEtag("etag2");
            partEtags.add(part2);
            CompleteMultipartUploadRequest request =
                    new CompleteMultipartUploadRequest("jkjianshen", "jk", uploadId, partEtags);
            CompleteMultipartUploadResult completeMultipartUploadResult = obsClient.completeMultipartUpload(request);
 
            String bucketName = completeMultipartUploadResult.getBucketName();
 
            String objectKey = completeMultipartUploadResult.getObjectKey();
            String etag = completeMultipartUploadResult.getEtag();
            String location = completeMultipartUploadResult.getLocation();
            String versionId = completeMultipartUploadResult.getVersionId();
            String objectUrl = completeMultipartUploadResult.getObjectUrl();
            String encodingType = completeMultipartUploadResult.getEncodingType();
            InputStream callbackResponseBody = completeMultipartUploadResult.getCallbackResponseBody();
            Map<String, Object> responseHeaders = completeMultipartUploadResult.getResponseHeaders();
            Map<String, Object> originalHeaders = completeMultipartUploadResult.getOriginalHeaders();
            String requestId = completeMultipartUploadResult.getRequestId();
            int statusCode = completeMultipartUploadResult.getStatusCode();
            System.err.println("bucketName=========="+bucketName);
            System.err.println("objectKey=========="+objectKey);
            System.err.println("etag=========="+etag);
            System.err.println("location=========="+location);
            System.err.println("versionId=========="+versionId);
            System.err.println("objectUrl=========="+objectUrl);
            System.err.println("encodingType=========="+encodingType);
            System.err.println("callbackResponseBody=========="+callbackResponseBody);
            System.err.println("responseHeaders=========="+responseHeaders);
            System.err.println("originalHeaders=========="+originalHeaders);
            System.err.println("requestId=========="+requestId);
            System.err.println("statusCode=========="+statusCode);
            System.out.println("completeMultipartUpload successfully");
        } catch (ObsException e) {
            System.out.println("CompleteMultipartUpload failed");
            // 请求失败,打印http状态码
            System.out.println("HTTP Code:" + e.getResponseCode());
            // 请求失败,打印服务端错误码
            System.out.println("Error Code:" + e.getErrorCode());
            // 请求失败,打印详细错误信息
            System.out.println("Error Message:" + e.getErrorMessage());
            // 请求失败,打印请求id
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("completeMultipartUpload failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
        return null;
    }
    public static String endUpload(String file,String objectName){
        // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
        ObsClient obsClient = new ObsClient(ak, sk,endPoint);
        try {
            UploadFileRequest request = new UploadFileRequest("jkjianshen", objectName);
            // 设置待上传的本地文件,localfile为待上传的本地文件路径,需要指定到具体带文件后缀的文件名
            request.setUploadFile(file);
            // 设置分段上传时的最大并发数
            request.setTaskNum(5);
            // 设置分段大小为10MB
            request.setPartSize( 1024 * 1024);
            // 开启断点续传模式
            request.setEnableCheckpoint(true);
            // 进行断点续传上传
            CompleteMultipartUploadResult result = obsClient.uploadFile(request);
            System.out.println("UploadFile successfully");
            return  result.getObjectUrl();
 
        } catch (ObsException e) {
            // 发生异常时可再次调用断点续传上传接口进行重新上传
            System.out.println("UploadFile failed");
            // 请求失败,打印http状态码
            System.out.println("HTTP Code:" + e.getResponseCode());
            // 请求失败,打印服务端错误码
            System.out.println("Error Code:" + e.getErrorCode());
            // 请求失败,打印详细错误信息
            System.out.println("Error Message:" + e.getErrorMessage());
            // 请求失败,打印请求id
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("UploadFile failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
        return null;
    }
 
}