package com.doumee.core.utils.huaweiOBS;
|
|
import com.azure.storage.blob.BlobContainerClient;
|
import com.azure.storage.blob.BlobServiceClient;
|
import com.azure.storage.blob.BlobServiceClientBuilder;
|
import com.doumee.core.utils.azure.AzureBlobUtil;
|
import com.obs.services.BasicObsCredentialsProvider;
|
import com.obs.services.ObsClient;
|
import com.obs.services.exception.ObsException;
|
import com.obs.services.model.*;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.URL;
|
import java.util.List;
|
|
/**
|
* @date 2020/4/28
|
*/
|
public class ObsUtil {
|
|
public ObsClient obsClient;
|
public String accessKey;
|
public String accessId;
|
public String endpoint;
|
|
public BlobContainerClient blobContainerClient ;
|
|
public ObsUtil(String accessId, String accessKey, String endpoint){
|
try {
|
this.accessId = accessId;
|
this.accessKey = accessKey;
|
this.endpoint = endpoint;
|
this.obsClient = new ObsClient(new BasicObsCredentialsProvider(accessId, accessKey), this.endpoint);
|
}catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
private void initClient() {
|
this.obsClient = new ObsClient(new BasicObsCredentialsProvider(this.accessId, this.accessKey), this.endpoint);
|
}
|
private void uploadLocalFile(File file,String bucket,String key) {
|
try {
|
if(this.obsClient == null){
|
initClient();
|
}
|
// 文件上传
|
// localfile 为待上传的本地文件路径,需要指定到具体的文件名
|
PutObjectRequest request = new PutObjectRequest();
|
request.setBucketName(bucket);
|
request.setObjectKey(key);
|
request.setFile(file);
|
obsClient.putObject(request);
|
System.out.println("putObject successfully");
|
} catch (ObsException e) {
|
System.out.println("putObject 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("putObject failed");
|
// 其他异常信息打印
|
e.printStackTrace();
|
}
|
}
|
|
|
/**
|
* 上传文件
|
* @param is
|
* @param objectKey
|
* @return
|
* @throws IOException
|
*/
|
public boolean uploadFile(String bucketName,InputStream is, String objectKey) throws Exception {
|
if(this.obsClient == null){
|
initClient();
|
}
|
|
try {
|
// 上传字符串(byte数组)
|
obsClient.putObject(bucketName, objectKey, is);
|
System.out.println("putObject successfully");
|
} catch (ObsException e) {
|
System.out.println("putObject 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());
|
return false;
|
} catch (Exception e) {
|
System.out.println("putObject failed");
|
// 其他异常信息打印
|
e.printStackTrace();
|
return false;
|
}finally {
|
if(this.obsClient!=null){
|
this.obsClient.close();
|
}
|
}
|
|
return true;
|
}
|
|
public static void main(String[] args) {
|
ObsUtil blobUtil = new ObsUtil("HPUAQVBRXX9A9TLZ3RTA","uHC2uoFh42Z2xgQmCBBtG8rNZ4Caf85qQ2DQqZZf","obs.cn-south-1.myhuaweicloud.com");
|
blobUtil.uploadLocalFile(new File("D://static/1.png"),"jinkuai","orders/1.png");
|
blobUtil.uploadLocalFile(new File("D://static/2.png"),"jinkuai","orders/2.png");
|
blobUtil.uploadLocalFile(new File("D://static/3.png"),"jinkuai","orders/3.png");
|
blobUtil.uploadLocalFile(new File("D://static/4.png"),"jinkuai","orders/4.png");
|
}
|
public static Integer uploadNetFile(ObsClient obsClient,String bucketName,String url, String objectKey) throws IOException {
|
InputStream is = new URL(url).openStream();
|
if(is != null){
|
Boolean flag = obsClient.doesObjectExist(bucketName, objectKey);
|
PutObjectResult result = null;
|
result = obsClient.putObject(bucketName, objectKey, is);
|
obsClient.close();
|
return result.getStatusCode();
|
}
|
//同名文件可能被覆盖
|
return null;
|
}
|
|
/**
|
* 获得所有文件
|
* @return
|
* @throws IOException
|
*/
|
public List<ObsObject> getAllFileInfo( ObsClient obsClient,String bucketName) throws IOException {
|
ObjectListing objectList = obsClient.listObjects(bucketName);
|
List<ObsObject> list = objectList.getObjects();
|
obsClient.close();
|
return list;
|
}
|
|
/**
|
* 删除文件
|
* @param objectKey
|
* @return
|
* @throws IOException
|
*/
|
public Boolean removeFile(ObsClient obsClient,String bucketName,String objectKey) throws IOException {
|
boolean exist = obsClient.doesObjectExist(bucketName, objectKey);
|
DeleteObjectResult result = null;
|
if (exist) {
|
result = obsClient.deleteObject(bucketName, objectKey);
|
}
|
obsClient.close();
|
//是否可以被标记为删除
|
return result.isDeleteMarker();
|
}
|
|
/**
|
* 获取文件对象-下载
|
* @param objectKey
|
* @return
|
*/
|
public ObsObject getFile(ObsClient obsClient,String bucketName,String objectKey) {
|
boolean exist = obsClient.doesObjectExist(bucketName, objectKey);
|
if (exist) {
|
ObsObject object = obsClient.getObject(bucketName, objectKey);
|
return object;
|
}
|
return null;
|
}
|
|
/**
|
* 预览授权访问-支持流式文件
|
* 如果是流式文件,返回的链接可以在浏览器预览
|
* 如果是非流式文件,返回的链接可以在浏览器里下载文件
|
* @param objectKey
|
* @return
|
* @throws IOException
|
*/
|
public String preview(ObsClient obsClient,String bucketName,String objectKey) throws IOException {
|
//300有效时间
|
TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, 300);
|
request.setBucketName(bucketName);
|
request.setObjectKey(objectKey);
|
TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
|
obsClient.close();
|
return response.getSignedUrl();
|
}
|
|
}
|