阿里云OSS对象存储的简单使用

文章目录

简单概念

  • Bucket:OSS 存储区域名

  • Bucket 域名:bucket 域名

  • EndPoint:大区域名

  • AccessKey ID:阿里云产品的通用id

  • Access Key Secret:密钥

配置文件

oss:
  endpoint: 大区域名   # oss-cn-xxxxxx.aliyuncs.com
  keyid:    阿里云产品的通用id
  keysecret: 密钥     # 填写生成的Accesssecret
  bucketname: bucket名称
  filehost: folder    # bucket下的文件夹路径

OSS bean

@Data
@Component
@ConfigurationProperties(prefix = "oss")
public class OSSConstant {
    private  String endpoint;
    private  String keyid;
    private  String keysecret;
    private  String bucketname;
    private  String filehost;
}

pom.xml

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.3.0</version>
</dependency>

工具类

@Component
@Slf4j
public class AliyunOSSUtil {
    @Autowired
    private OSSConstant ossConstant;

    private OSSClient Client;

    private String bucketName;
    private String folder;
    private final String prefix = "https://xxxxxxxxx.oss-cn-xxxxxxx.aliyuncs.com/";

    /**
     * 初始化客户端
     * @return
     */
    private OSSClient getOssClient(){
        if(Client == null){
            Client = new OSSClient(ossConstant.getEndpoint(), ossConstant.getKeyid(), ossConstant.getKeysecret());
            bucketName = ossConstant.getBucketname();
            folder = ossConstant.getFilehost();
        }
        return Client;
    }

    /**
     * 多图上传
     * @return
     */
    public String[] uploadImageToOSS(String[] fileNames, InputStream[] inputStreams) {
        //创建OSS客户端
        OSSClient ossClient = getOssClient();
        try {
            ConcurrentLinkedQueue concurrentLinkedQueue = new ConcurrentLinkedQueue(Arrays.asList(fileNames));
            ConcurrentLinkedQueue<InputStream> streamConcurrentLinkedQueue = new ConcurrentLinkedQueue<>(Arrays.asList(inputStreams));
            Iterator<InputStream> inputStreamss = streamConcurrentLinkedQueue.iterator();
            ConcurrentLinkedQueue c = new ConcurrentLinkedQueue();
            for (Iterator<String> iterator = concurrentLinkedQueue.iterator();
                 iterator.hasNext() && inputStreamss.hasNext(); ) {
                String uuid = UUID.randomUUID().toString().replaceAll("-", "");
                String[] names = iterator.next().split("[.]");
                String name = uuid + "." + names[names.length - 1];
                ossClient.putObject(new PutObjectRequest(bucketName, folder + name, inputStreamss.next()));
                c.add( prefix + folder + name);
            }
            return (String[]) c.toArray(new String[0]);
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println(e.getMessage());
        } finally {
            ossClient.shutdown();
        }
        return null;
    }

    /**
     * 删除图片
     * @param url
     */
    public void deleteImg(String url) {
        OSSClient ossClient = getOssClient();
        if (url == null || "".equals(url)) {
            return;
        }
        String[] paths = url.split("[.]");
        /**
         * 文件夹是否存在
         */
        if (!ossClient.doesObjectExist(bucketName, folder)) {
            ossClient.putObject(bucketName, folder, new ByteArrayInputStream(new byte[0]));
        }
        String[] name = paths[paths.length - 2].split("[/]");
        /**
         * 对象是否存在
         */
        if (ossClient
                .doesObjectExist(bucketName,
                        folder + name[name.length - 1] + "." + paths[paths.length - 1])) {
            /**
             * 删除存在对象
             */
            ossClient
                    .deleteObject(bucketName, folder + name[name.length - 1] + "." + paths[paths.length - 1]);
        }
        ossClient.shutdown();
    }

}
上一篇:CMake获取当前目录名以及获取上层目录名


下一篇:《自拍教程78》Python 百度网盘500个文件分割