package com.stylefeng.guns.modular.system.util;
|
import java.util.Map;
|
import java.io.InputStream;
|
|
import com.obs.services.ObsClient;
|
import com.obs.services.exception.ObsException;
|
import com.obs.services.model.*;
|
import java.io.File;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
public class UploadVideoUtil {
|
public 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 String uploadVideo(File file){
|
// 您可以通过环境变量获取访问密钥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";
|
ObsClient obsClient = new ObsClient(ak, sk,endPoint);
|
try {
|
String uploadId = "upload id from initiateMultipartUpload";
|
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(new File("localfile"));
|
// 设置第二段的段偏移量
|
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 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;
|
}
|
|
}
|