Bootstrap

阿里云存储OSS《快速使用》

一、快速使用

1、注册账号并实名验证

2、搜索找到对象存储OSS,开通OSS服务

3、查看官方文档


二、具体使用

1、 注册阿里云账号和实名认证

(1)网址:https://www.aliyun.com/

(2)可以使用支付宝注册,现在还提供了钉钉注册方式

(3)注册成功后需要实名认证才能开通“对象存储OSS”服务

2、开通“对象存储OSS”服务

直接搜索找到【对象存储OSS】,开通OSS服务

3、控制台的使用

(1)开通服务后,进入控制台

(2)手动创建bucket

 1)通过【创建Bucket】进行新建

bucket名称:自定义;

地域:系统会自动选择最优的,默认即可;

同城冗余存储:关闭,选择启动是要收费的;

读写权限:根据需要来选择;这里会为了后续讲解,会选择“公共读”

如果只是学习,基本上都默认即可

2)点击确定,这样我们就手动创建好了一个bucket

3)这时,我们可以试着上传文件了,阿里云是提供了两种访问方式,一种是后台管理系统,一种是API

 当然,在日常的开发中,是使用api的,因为你不可能叫用户打开阿里云去上传文件

 3)如果想删除bucket

(3)权限的设置

1)因为我们前面创建选择的读写权限是“公共读”,所以后续我们是需要设置AccessKey的

 2)进入AccessKey 管理

3)在使用AccessKey时,我们通常的做法是创建子用户key,不同的服务开通不同的子key,这样会更安全

4)开通子用户AccessKey

①做编程的要勾上Open API...

②验证

 ③创建子用户成功

注意:这时我们最后把key账号和密钥复制下来,找个地方存好备用,因为后面会直接给你隐藏掉了

 或者直接下载下来也可以

④最后为用户添加权限

如果没有添加权限,后面开发时,就会经常报错“没有权限”

 如果是平时的简单使用,到这里就可以了,如果需要做开发的,下面才是重要的。

4、查阅阿里云API(最核心)

做开发的怎么能离开开发文档呢

(1)进入oss学习路径 

(2)根据自己的开发语言选择SDK

因为我是写Java的,所以用Java SDK

(3)Java SDK概要

从Java SDK进来后,可以看到里面有着方方面面的介绍

5、一个简单的示例(Java创建bucket)

以下都可以通过查阅官方文档实现

(1)检查自己的jdk版本,要求是1.7及以上版本

(2)创建一个Maven项目

(2)安装sdk

这里是使用的是Maven项目,所以直接安装依赖即可

    <dependencies>
        <!--aliyunOSS-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

 然后等待下载好依赖,即可做一些简单的操作

(3)Java创建bucket

①查阅官方文档-创建存储空间

 ②复制示例代码,然后根据之前保存的我们自己的AccessKey来修改即可,具体如下:

主要修改这几个即可
String endpoint
String accessKeyId 
String accessKeySecret 
String bucketName 
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CreateBucketRequest;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // 创建CreateBucketRequest对象。
            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);

            // 如果创建存储空间的同时需要指定存储类型和数据容灾类型, 请参考如下代码。
            // 此处以设置存储空间的存储类型为标准存储为例介绍。
            //createBucketRequest.setStorageClass(StorageClass.Standard);
            // 数据容灾类型默认为本地冗余存储,即DataRedundancyType.LRS。如果需要设置数据容灾类型为同城冗余存储,请设置为DataRedundancyType.ZRS。
            //createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS);
            // 设置存储空间的权限为公共读,默认为私有。
            //createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);

            // 创建存储空间。
            ossClient.createBucket(createBucketRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

②判断bucket是否存在

如果有以下报错就是bucket已经存在了

<Error>
  <Code>BucketAlreadyExists</Code>
  <Message>The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.</Message>
  <RequestId>623436******23630228039</RequestId>
  <HostId>xbao-1.oss-cn-beijing.aliyuncs.com</HostId>
  <BucketName>xbao-1</BucketName>
</Error>

③设置读写权限

默认创建出来的是“私有”项目,而我们想要的是“公共读”,所以就需要设置读写权限

(4)在实际开发中的文件上传(springcloud)

1)在中application.yml的配置

aliyun:
  oss:
    endpoint: 你的endponit
    keyid: 你的阿里云keyid
    keysecret: 你的阿里云keysecret
    bucketname: 你的阿里云bucket

2)定义工具类从配置文件中读取常量

@Data:lombok的注解
@Component: 加载到spring中
@ConfigurationProperties(prefix="aliyun.oss"):读取前缀是aliyun.oss的配置,根据名字endpoint、keyid等匹配赋值常量

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

3)文件上传的业务接口

public interface FileService {
    /**
     * 阿里云oss文件上传
     * @param inputStream 输入流
     * @param module 文件夹名称
     * @param originalFilename 原始文件名称
     * @return 文件在oss服务器上的url地址
     */
    String upload(InputStream inputStream, String module, String originalFilename);
}
@Service
public class FileServiceImpl implements FileService {


    @Autowired
    private OssProperties ossProperties;

    @Override
    public String upload(InputStream inputStream, String module, String originalFilename) {

        // 读取配置
        String endpoint = ossProperties.getEndpoint();
        String keyid = ossProperties.getKeyid();
        String keysecret = ossProperties.getKeysecret();
        String bucketname = ossProperties.getBucketname();

        //判断oss实例是否存在:如果不存在则创建,如果存在则获取
        OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret);
        if (!ossClient.doesBucketExist(bucketname)) {
            //创建bucket
            ossClient.createBucket(bucketname);
            //设置oss实例的访问权限:公共读
            ossClient.setBucketAcl(bucketname, CannedAccessControlList.PublicRead);
        }

        //构建日期路径
        String folder = new DateTime().toString("yyyy/MM/dd");

        //文件名:uuid.扩展名
        String fileName = UUID.randomUUID().toString();
        String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
        String key = module + "/" + folder + "/" + fileName + fileExtension;

        //文件上传至阿里云
        ossClient.putObject(ossProperties.getBucketname(), key, inputStream);

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

        //返回url地址
        return "https://" + bucketname + "." + endpoint + "/" + key;
    }
}

具体需要什么,查阅官方文档很快就能找到demo。

;