Java操作OSS


import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;

/**
 * 对象存储OSS的相关操作
 * @author ruanjiayu
 * @dateTime 2019/7/16 15:53
 */
@Component
@Slf4j
public class OssUtils {

    private static String END_POINT;

    private static String ACCESS_KEY_ID;

    private static String ACCESS_KEY_SECRET;
    /**所属的桶*/
    private static String BUCKET_NAME;


    @Value("${oss.endpoint}")
    private void setEndPoint(String endPoint){
        END_POINT = endPoint;
    }
    @Value("${oss.accessKeyId}")
    private void setAccessKeyId(String accessKeyId){
        ACCESS_KEY_ID = accessKeyId;
    }
    @Value("${oss.accessKeySecret}")
    private void setAccessKeySecret(String accessKeySecret){
        ACCESS_KEY_SECRET = accessKeySecret;
    }
    @Value("${oss.bucketName}")
    private void setBucketName(String bucketName){
        BUCKET_NAME = bucketName;
    }

    /**
     * 创建一个OSS客户端连接器
     * @return OSS客户端
     */
    private static OSS createOSSClient(){
        String endpoint = END_POINT;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = ACCESS_KEY_ID;
        String accessKeySecret = ACCESS_KEY_SECRET;

// 创建OSSClient实例。
        return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     *  上传本地文件到OSS
     * @param key 放置指定的位置的文件名字。如:IM/2.jpg
     * @param filePath 本地照片的位置。 如:E:\images\image.jpg
     */
    public static void uploadFileLocal(String key,String filePath){

// 创建OSSClient实例。
        OSS ossClient = createOSSClient();
// 上传文件。
        ossClient.putObject(BUCKET_NAME, key, new File(filePath));
// 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 通过文件流来上传文件
     * @param key 放置云端位置的文件名字。如:IM/2.jpg
     * @param inputStream 文件流
     */
    public static void uploadFileStream(String key, InputStream inputStream){

// 创建OSSClient实例。
        OSS ossClient = createOSSClient();
// 上传文件
        ossClient.putObject(BUCKET_NAME, key,inputStream);
// 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 下载文件
     * @param objectName 云端文件的名字。如:IM/2.jpg
     * @param filePath 指定文件下载在本地哪里。 如:E:\images\image.jpg
     */
    public static void downloadFile(String objectName,String filePath){
        // 创建OSSClient实例。
        OSS ossClient = createOSSClient();
// 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
        ossClient.getObject(new GetObjectRequest(BUCKET_NAME, objectName), new File(filePath));

// 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 删除指定的文件
     * @param objectName 云端文件的名字。如:IM/2.jpg
     */
    public static void removeFile(String objectName){
// 创建OSSClient实例。
        OSS ossClient = createOSSClient();
// 删除文件。
        ossClient.deleteObject(BUCKET_NAME, objectName);
// 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     *  获取上传文件的url
     * @param key 上传在桶内地址bucket_name
     */
    public static String getFileUrl(String key){
// 设置时间
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        //表示你需要的年数
        int reduceYear = 20;
        c.add(Calendar.YEAR,reduceYear);
        Date expiration = c.getTime();
// 创建OSSClient实例。
        OSS ossClient = createOSSClient();
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
        URL url = ossClient.generatePresignedUrl(BUCKET_NAME, key, expiration);
// 关闭OSSClient。
        ossClient.shutdown();

        return url.toString();
    }
}

版权声明:本文为qq_41967899原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。