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 getAllFileInfo( ObsClient obsClient,String bucketName) throws IOException { ObjectListing objectList = obsClient.listObjects(bucketName); List 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(); } }