package com.search.supersearch.service;

import com.aliyun.oss.OSS;
import com.aliyun.oss.model.OSSObject;
import com.search.supersearch.config.OSSConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.net.URL;
import java.util.Date;

/**
 * @author 喜欢番茄火锅
 * @date 2023/10/17 10:34
 */
@Service
@Slf4j
public class OssService {
    @Value("${oss.bucketName}")
    private String bucket_name;
    @Resource
    private OSSConfig oSSConfig;

    public URL getOssObjectUrl(String objectName,OSS oss) {

        URL url;
        try {
//            log.info("处理文件 objectName={}", objectName);
            if (!oss.doesObjectExist(bucket_name, objectName)) {
                log.error("oss 文件不存在");
                return null;
            }
            // 调用ossClient.getObject返回一个OSSObject实例，该实例包含文件内容及文件元信息。
            OSSObject ossObject = oss.getObject(bucket_name, objectName);
            if (ossObject.getObjectMetadata().getContentLength() < 1) {
                log.error("oss 过小");
                return null;
            }
//            log.info("调用ossClient.getObject完成,requestId={}", ossObject.getRequestId());

            // 设置签名URL过期时间，单位为毫秒。本示例以设置过期时间为1小时为例。
            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000L);
            // 生成以GET方法访问的签名URL，访客可以直接通过浏览器访问相关内容。
            url = oss.generatePresignedUrl(bucket_name, objectName, expiration);
//            log.info("调用生成以GET方法访问的签名URLt完成,requestId={}", url);
        } finally {
            oss.shutdown();
        }
        return url;
    }

    public OSS restOSSClient() {
        return oSSConfig.restOSSClient();
    }

}
