package com.hx.util; import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.HeaderResponse; import com.obs.services.model.ObsBucket; import com.obs.services.model.PutObjectResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.UUID; /**华为云 OBS(OSS) * @author ChenJiaHe * @date 2021-05-06 */ public class OBSUtil { //log4j日志 private static Logger logger = LoggerFactory.getLogger(OBSUtil.class.getName()); /** 后端调用上传图片 * @param localFile 图片文件 * @param ak 访问秘钥 * @param sk 访问秘钥 * @param endPoint 区域 * @param bucketName 存储桶 * @param fileName 文件名称(带后缀),为空时自动生成 * @return * @throws IOException */ public static PutObjectResult uploadImg(MultipartFile localFile,String ak,String sk,String endPoint,String bucketName,String folderName,String fileName) throws IOException { //没有名次的时候自动生成 if(StringUtils.isNull(fileName)){ fileName = UUID.randomUUID().toString(); if (localFile.getOriginalFilename().lastIndexOf(".") >= 0){ fileName += localFile.getOriginalFilename().substring(localFile.getOriginalFilename().lastIndexOf(".")); } } if(StringUtils.noNull(folderName)){ fileName = folderName+"/"+fileName; } PutObjectResult putObjectResult = null; //初始化OBS客户端 ObsClient obsClient = new ObsClient(ak, sk, endPoint); try{ putObjectResult = obsClient.putObject(bucketName,fileName , localFile.getInputStream()); }catch (ObsException e){ logger.error("华为云 OBS 上传文件报错 "); logger.error("HTTP Code: " + e.getResponseCode()); logger.error("Error Code:" + e.getErrorCode()); logger.error("Error Message: " + e.getErrorMessage()); logger.error("Request ID:" + e.getErrorRequestId()); logger.error("Host ID:" + e.getErrorHostId()); e.printStackTrace(); }finally { if(obsClient != null){ obsClient.close(); } } return putObjectResult; } /** 后端调用上传图片 * @param localFile 存储文件 * @param ak 访问秘钥 * @param sk 访问秘钥 * @param endPoint 区域 * @param bucketName 存储桶 * @param folderName 文件夹名称 * @param fileName 文件名称(带后缀),为空时自动生成 * @return * @throws IOException */ public static PutObjectResult uploadImg(File localFile,String ak,String sk,String endPoint,String bucketName,String folderName,String fileName) throws IOException { //没有名次的时候自动生成 if(StringUtils.isNull(fileName)){ fileName = UUID.randomUUID().toString(); if (localFile.getName().lastIndexOf(".") >= 0){ fileName += localFile.getName().substring(localFile.getName().lastIndexOf(".")); } } if(StringUtils.noNull(folderName)){ fileName = folderName+"/"+fileName; } PutObjectResult putObjectResult = null; //初始化OBS客户端 ObsClient obsClient = new ObsClient(ak, sk, endPoint); try{ putObjectResult = obsClient.putObject(bucketName, fileName, localFile); }catch (ObsException e){ logger.error("华为云 OBS 上传文件报错 "); logger.error("HTTP Code: " + e.getResponseCode()); logger.error("Error Code:" + e.getErrorCode()); logger.error("Error Message: " + e.getErrorMessage()); logger.error("Request ID:" + e.getErrorRequestId()); logger.error("Host ID:" + e.getErrorHostId()); e.printStackTrace(); }finally { if(obsClient != null){ obsClient.close(); } } return putObjectResult; } /** 创建桶 * @param ak 访问秘钥 * @param sk 访问秘钥 * @param endPoint 区域 * @param bucketName 存储桶 * @return * @throws IOException */ public static HeaderResponse createBucket(String ak,String sk,String endPoint,String bucketName) throws IOException { HeaderResponse response = null; //初始化OBS客户端 ObsClient obsClient = new ObsClient(ak, sk, endPoint); try{ response = obsClient.createBucket(bucketName); }catch (ObsException e){ logger.error("华为云 OBS 创建桶报错 "); logger.error("HTTP Code: " + e.getResponseCode()); logger.error("Error Code:" + e.getErrorCode()); logger.error("Error Message: " + e.getErrorMessage()); logger.error("Request ID:" + e.getErrorRequestId()); logger.error("Host ID:" + e.getErrorHostId()); e.printStackTrace(); }finally { if(obsClient != null){ obsClient.close(); } } return response; } }