package com.artfess.file.util; import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.GetObjectRequest; import com.obs.services.model.HeaderResponse; import com.obs.services.model.HttpMethodEnum; import com.obs.services.model.ObjectMetadata; import com.obs.services.model.ObsObject; import com.obs.services.model.ProgressListener; import com.obs.services.model.ProgressStatus; import com.obs.services.model.PutObjectResult; import com.obs.services.model.TemporarySignatureRequest; import com.obs.services.model.TemporarySignatureResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @Slf4j @Component public class HuaweiyunOssUtil { private static String ak; private static String sk; private static String bucketName; private static String endpoint; public static String getAk() { return ak; } public static void setAk(String ak) { HuaweiyunOssUtil.ak = ak; } public static String getSk() { return sk; } public static void setSk(String sk) { HuaweiyunOssUtil.sk = sk; } public static String getBucketName() { return bucketName; } public static void setBucketName(String bucketName) { HuaweiyunOssUtil.bucketName = bucketName; } public static String getEndpoint() { return endpoint; } public static void setEndpoint(String endpoint) { HuaweiyunOssUtil.endpoint = endpoint; } private static ObsClient obsClient = null; /** * 上传文件 * path:文件路径 * * @return */ public static boolean uploadFile(String path) { try { initObsClient(ak, sk, endpoint); File file = new File(path); FileInputStream fis = new FileInputStream(file); PutObjectResult response = obsClient.putObject(bucketName, file.getName(), fis); // 可选:调用成功后,记录调用成功的HTTP状态码和服务端请求ID int statusCode = response.getStatusCode(); obsClient.close(); if (200 == statusCode) { return true; } } catch (IOException e) { log.error("文件上传失败:{}", e.getMessage(), e); } return false; } /** * 上传文件--流式 * * @param fileName 上传文件名称 * @param is 文件流 * @return */ public static boolean uploadFile(String fileName, InputStream is) { try { initObsClient(ak, sk, endpoint); HeaderResponse response = obsClient.putObject(bucketName, fileName, is); // 可选:调用成功后,记录调用成功的HTTP状态码和服务端请求ID int statusCode = response.getStatusCode(); is.close(); obsClient.close(); } catch (ObsException e) { System.out.println("HTTP Code: " + e.getResponseCode()); System.out.println("Error Code:" + e.getErrorCode()); System.out.println("Request ID:" + e.getErrorRequestId()); // 推荐:发生异常后,记录异常堆栈信息 e.printStackTrace(System.out); } catch (IOException e) { e.printStackTrace(); } return true; } /** * @param fileName:文件名称 * @Description: 下载 * @Return: byte[] * @Author: llj * @Date: 2021/3/19 16:07 */ public static byte[] Download(String fileName, OutputStream out) throws IOException { initObsClient(ak, sk, endpoint); ObsObject obsObject = obsClient.getObject(bucketName, fileName); // 读取对象内容 InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len = input.read(b)) != -1) { out.write(b, 0, len); } out.close(); input.close(); obsClient.close(); return bos.toByteArray(); } /* * @Description: * @param [fileName] * @Return: void * @Author: llj * @Date: 2021/3/19 16:08 */ public static void DownloadChange(String fileName) throws IOException { // 创建ObsClient实例 initObsClient(ak, sk, endpoint); GetObjectRequest request = new GetObjectRequest(bucketName, fileName); request.setProgressListener(new ProgressListener() { @Override public void progressChanged(ProgressStatus status) { // 获取下载平均速率 System.out.println("AverageSpeed:" + status.getAverageSpeed()); // 获取下载进度百分比 System.out.println("TransferPercentage:" + status.getTransferPercentage()); } }); // 每上传1MB数据反馈下载进度 request.setProgressInterval(1024 * 1024L); ObsObject obsObject = obsClient.getObject(request); // 读取对象内容 System.out.println(obsObject.toString()); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len = input.read(b)) != -1) { bos.write(b, 0, len); } System.out.println(new String(bos.toByteArray())); bos.close(); input.close(); } /** * 获取文件下载地址 * * @param fileName 文件名称 * @return */ public static String getDownloadUrl(String fileName) { initObsClient(ak, sk, endpoint); // URL有效期,3600秒.5分钟 long expireSeconds = 3600L; TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds); request.setBucketName(bucketName); request.setObjectKey(fileName); TemporarySignatureResponse response = obsClient.createTemporarySignature(request); return response.getSignedUrl(); } public static boolean chekckFile(String fileName) { initObsClient(ak, sk, endpoint); ObjectMetadata metadata = obsClient.getObjectMetadata(bucketName, fileName); if (metadata == null) { return false; } return true; } /** * @param fileName obs上桶下文件路径 * @Description: 删除附件 * @Return: boolean * @Author: llj * @Date: 2021/3/23 10:08 */ public static boolean deleteFile(String fileName) { try { initObsClient(ak, sk, endpoint); obsClient.deleteObject(bucketName, fileName); obsClient.close(); return true; } catch (IOException e) { e.printStackTrace(); return false; } } /** * 初始化客户端 * * @param ak * @param sk * @param endpoint * @return */ private static ObsClient initObsClient(String ak, String sk, String endpoint) { obsClient = new ObsClient(ak, sk, endpoint); return obsClient; } }