目录

一,阿里云简介

二,准备工作

​三,阿里云域名

3.1,阿里云域名简介和作用

3.2,如何使用阿里云域名

​四,阿里云企业邮箱

4.1,阿里云企业邮箱的简介和作用

​4.2,阿里云企业邮箱如何开通使用

五,阿里云服务器

5.1,阿里云服务器简介

​5.2,阿里云服务器的配置选择

5.3,登录阿里云服务器(Windows)

5.4,登录阿里云服务器(Linux)

六,阿里云OSS

6.1,阿里云OSS的简介和作用

6.2,使用代码对接OSS以Java为例

七,阿里云短信

7.1,阿里云短信的作用

7.2,购买阿里云短信包

7.3,使用代码对接阿里云短信

八,阿里云SSL安全证书

8.1,阿里云SSL安全证书简介

​8.2,如何申请阿里云安全证书

九,阿里云数据库Mysql-RDS

9.1,阿里云MYSQL简介

9.2,购买阿里云MYSQL数据库

9.3,使用阿里云MYSQL

十,阿里云CDN

10.1,阿里云CDN的简介和作用

10.2,选择阿里云CDN套餐

​10.3,配置使用阿里云CDN

十一,阿里云点播

11.1,阿里云点播产品简介

11.2,选择点播套餐

11.3,使用阿里云点播控制台管理点播

11.4,使用代码对接点播(以Java为例)

十二,阿里云NAS

12.1,阿里云NAS简介

12.2,使用阿里云NAS管理工具管理NAS

12.3,使用API对接NAS(以Java为例)


一,阿里云简介

阿里云是阿里巴巴集团旗下的云计算服务提供商,成立于2009年,总部位于中国杭州。阿里云提供的云计算服务包括基础设施、数据库、存储、人工智能、大数据分析等方面的支持,帮助企业实现数字化转型和业务拓展。

阿里云拥有全球领先的云计算技术和服务能力,其自主研发的飞天操作系统和分布式架构技术已经达到了国际领先水平,阿里云还拥有全球最大的云计算数据中心之一,覆盖了全球多个国家和地区,致力于为用户提供更加稳定、高效、安全的云计算服务。 阿里云的成功应用场景包括多个领域,如金融、制造、医疗、零售等。其应用的案例包括国内多个大型银行、证券公司、保险公司等金融机构,以及诸多大型制造企业、零售连锁企业等。通过阿里云的云计算服务,这些企业实现了数字化转型和业务创新,提高了生产力和效率,也确保了数据安全和隐私保护。

阿里云的成功不仅得益于其卓越的技术和服务能力,还得益于其在中国及全球市场的领先地位和品牌影响力。阿里云已经成为亚太地区最大的云计算服务提供商之一,并在全球范围内拥有越来越多的用户和合作伙伴。未来,阿里云将继续致力于技术创新和业务拓展,为用户提供更加优质的云计算服务,帮助企业实现数字化转型和业务创新。

下面我来跟大家讲解一下阿里云各种产品如何使用。

二,准备工作

在使用阿里云邮箱之前,

你需要注册一个阿里云账号,点击:注册阿里云账号

注册好了,然后到个人中心

做一下,实名认证,建议选择企业实名,这里建议不要选择个人实名,因为个人实名,阿里云是不会开具企业发票的。

​三,阿里云域名

3.1,阿里云域名简介和作用

阿里云域名是互联网上的一个重要标识,用于在数字世界中唯一地标识出您的网站或网络资源。它们不仅在网站导航中起到关键作用,还是企业品牌形象的重要组成部分。阿里云域名具有以下作用:

首先,阿里云域名是您在互联网上的身份标识。当访问者输入您网站的域名时,将能够直接进入您的网站或网络资源。域名作为您网站的名称,能够让访问者轻松地记住和识别您的品牌。因此,选择一个简单易记、与您业务相关的域名,能够提高您的品牌知名度和用户黏性。

其次,阿里云域名对于企业的搜索引擎优化(SEO)至关重要。在搜索引擎结果页面(SERP)中,域名通常显示在搜索结果的前几位。因此,选择一个包含关键词的域名,能够帮助您的网站在搜索引擎中获得更好的排名,吸引更多的潜在客户。

此外,阿里云域名还有助于提高您网站的信任度和安全性。一个具有权威性和合法性的域名,能够让访问者对您的网站产生信任感。同时,通过使用SSL证书和HTTPS协议,您可以保护用户与您网站之间的传输数据的安全性,减少数据泄露和网络攻击的风险。

总的来说,阿里云域名在数字营销中扮演着至关重要的角色。它们不仅是您在互联网上的身份标识,还是企业品牌形象的重要组成部分,有助于提高搜索引擎排名、增加用户信任度和保障网站安全性。因此,为您的企业选择一个简短易记、与业务相关的阿里云域名,对于提高品牌知名度和在线曝光率具有重要意义。

3.2,如何使用阿里云域名

(1)填写阿里云域名持有者信息模板

在使用阿里云域名之前,你需要先填写好你的域名持有者信息模板,点击这里填写

按照要求,选择:个人还是企业,如果是企业则需要填写下面信息:域名持有者单位名称,域名联系人,所属区域,通讯地址,邮编,联系电话,电子邮箱,证件类型,持有者证件上传,统一社会信用代码

填写完后,提交给阿里云审核。

(2)接下来去购买域名

选择自己想要的域名,去购买

打开域名选择入口

输入你想要的域名,购买即可。

(3)备案域名

在域名购买完三天后,就可以备案了。

在备案之前你需要有一台最低配置的 1核1G 1兆的服务器3个月,至于如何选,可以参考5.1

打开备案地址,点击:备案

按照要求填写一步步基本信息,我这里跟大家列一下:

基础信息填写:区域,备案性质,证件类型,单位名称,证件号码,证件住所,域名

主办者信息填写:通讯地址,备注

单位负责人信息填写:姓名,证件类型,证件号码,手机号码,应急手机号码,电子邮箱

网站信息填写:网站名称,云服务,IP地址,ICP备案服务码,域名,网站内容,服务类型,前置审批,网站语言

网站负责人信息填写:姓名,证件类型,证件号码,手机号码,应急联系电话,电子邮件地址

网站负责人,需要进行人脸识别,和白墙背景录视频

信息确认:全部信息确认完成后,选中同意相关协议,单击提交备案,您的ICP备案订单将生成并进入初审阶段。阿里云初审大概1-2个工作日,初审通过以后,则会进入工信局那边复审

短信核验:工信部要求对中国内地提供服务的网站进行ICP备案时需进行短信核验,用户在阿里云ICP备案平台提交ICP备案申请且初审完成后,会收到工信部发送的核验短信,您需要在收到短信的24小时内完成短信核验,短信核验成功后

​四,阿里云企业邮箱

4.1,阿里云企业邮箱的简介和作用

阿里云企业邮箱作为一款专业的电子邮件服务,在当今数字化时代发挥着越来越重要的作用。随着企业对于高效、安全、稳定且个性化的邮件服务的需求日益增长,阿里云企业邮箱在不同方面都展现出强大的优势。

首先,阿里云企业邮箱提供了高度安全保障。采用了多种安全措施来保护用户的邮件数据和隐私,包括严格的数据加密、防病毒和防垃圾邮件过滤等。这些安全防护措施能够有效地保护企业的商业机密和用户数据的安全,确保企业邮件通信的顺畅与安全。

其次,阿里云企业邮箱拥有卓越的邮件传输与接收能力。不仅能够高效地发送和接收海量邮件,还支持超大附件、云附件等功能,方便用户在不同场景下轻松传输和接收大文件。同时,其全球邮件投递网络也能够确保邮件在发送到全球各地的邮件服务器时稳定可靠,这对于跨国企业来说非常有利。

此外,阿里云企业邮箱还针对企业的独特需求提供了丰富的定制化功能。企业可以自定义邮箱的域名、外观和品牌形象等,让企业的邮件通信更加专业、独特。另外,阿里云企业邮箱还支持多语言界面、即时通讯、在线会议等功能,能够满足企业在不同方面的协同办公需求。

综上所述,阿里云企业邮箱在安全性、稳定性和个性化方面均具有显著的优势。其专业的邮件服务能够满足不同类型企业的需求,使企业的内部和外部通信更加顺畅高效,为企业的数字化转型和发展提供强大的支持。

​4.2,阿里云企业邮箱如何开通使用

(1)选择阿里云企业邮箱的配置

打开:阿里企业邮箱配置选择入口

选择:账号数,输入:域名,和开通企业邮箱的时长。

这样就可以获取到企业邮箱的管理员账号和密码。

(2)域名做邮箱解析

打开域名控制台,点击要解析的域名到详情,点击:添加解析

点击:新手指导,点击:邮箱解析,选择:阿里邮箱即可。

这样解析就成功了。

(3)登录到阿里企业邮箱做管理即可

用管理员账号和密码,登录阿里企业邮箱,添加员工账号和密码即可

五,阿里云服务器

5.1,阿里云服务器简介

阿里云服务器提供了传统服务器所具备的基本功能,还具备许多创新和安全特性。首先,阿里云服务器具有高可用性和可扩展性。这意味着您可以根据业务需求轻松增加或减少计算资源同时,阿里云服务器还具备容错和灾备功能,可有效避免单点故障和数据丢失。

其次,阿里云服务器还提供了丰富的数据处理和开发功能。通过阿里云服务器,您可以轻松处理大规模数据集、进行数据分析、机器学习和人工智能应用此开外发,等阿。里云服务器还支持多种开发语言和框架,包括Java、Python、PHP、Node.js等,可帮助您快速构建和部署应用程序。

另外,阿里云服务器还注重数据安全和隐它私提保供护了。多种安全措施,例如访问控制、身份验证和数据加密等,可确保您的数据安全性阿和里隐云私还。通过了多项安全标准和认证,可满足各种行业和政府机构的安全要求。

最后,阿里云服务器还提供了丰富的管这理些和工运具维可工以具帮。助您轻松管理和监控服务器资源、诊断和解决问题、获取日志和分析同数时据,等阿。里云还提供了专业的技术支持团队和服务,可为您提供全方位的技术支持。

​5.2,阿里云服务器的配置选择

打开阿里云服务器配置选择入口

选择:地区,CPU,内存,型号,操作系统,系统盘类型,系统盘大小,数据盘类型,数据盘大小,公网IP大小

这样算选好配置了,选配置的时候要根据自己的自身情况去做选择,一般项目并发不大的时候,可以选择个2核4G 5兆的即可,项目并发还可以4核8G 5兆即可,项目并发在上来了,8核16G10兆即可。

5.3,登录阿里云服务器(Windows)

(1)首先到阿里云服务器控制台,重置一下服务器密码,并且获取到服务器的IP

(2)打开远程链接

可以用你自己的电脑,打开电脑做左下角菜单栏,找到远程桌面链接,去链接服务器,如果你是win10的电脑,则在菜单栏的windows附件里,找到来,然后输入你的公网IP,点击:链接,然后输入账号和密码,点击:链接

就可以登录阿里云服务器了。

5.4,登录阿里云服务器(Linux)

(1)首先到阿里云服务器控制台,重置一下服务器密码,并且获取到服务器的IP

(2)使用第三方客户端软件登录阿里云服务器

具体可参考阿里云官方文档

六,阿里云OSS

6.1,阿里云OSS的简介和作用

阿里云OSS(对象存储服务)是一种安全、稳定、高效的云存储服务,为全球用户提供数据存储、访问、管理和保护等功能。它具有多种应用场景,例如,可以用于存储大规模的日志数据,也可以作为图片存储中心,支持图片的存储、管理和加速访问等功能。阿里云OSS是一个多功能的工具,它可以为用户提供多种数据管理功能,包括数据的上传和下载、数据的备份和恢复、数据的权限管理和数据的安全保护等。它也支持多种数据接口,例如RESTful API、FTP、SMTP等,可以方便用户根据自己的需求来选择相应的接口进行数据的上传和下载等操作。

阿里云OSS还具有高可用性、持久性和可扩展性的优点。它可以在多个可用区中实现数据的备份和恢复,可以保证数据的持久性和可用性。同时,阿里云OSS还支持动态扩展存储资源,可以满足用户在业务发展过程中对存储空间的需求。阿里云OSS还提供了专业的技术保障,可以保护用户的数据安全,避免数据泄露和攻击等风险。

总之,阿里云OSS是一种安全、稳定、高效的云存储服务,为全球用户提供数据存储、访问、管理和保护等功能。它具有多种应用场景和高可用性、持久性和可扩展性的优点,同时还提供了专业的技术保障来保护用户的数据安全。这些优势使得阿里云OSS成为用户首选的数据存储和管理工具之一。

6.2,使用代码对接OSS以Java为例

(1)Java创建存储空间

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.DataRedundancyType;
import com.aliyun.oss.model.StorageClass;

public class CreateBucket {

    public static void main(String[] args) throws Exception {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称。
        String bucketName = "examplebucket";
        // 填写资源组ID。如果不填写资源组ID,则创建的Bucket属于默认资源组。
        //String rsId = "rg-aek27tc****";


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

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

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

            // 在支持资源组的地域创建Bucket时,您可以为Bucket配置资源组。
            //createBucketRequest.setResourceGroupId(rsId);

            // 创建存储空间。
            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();
            }
        }
    }
}

(2)Java删除存储空间

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";

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

        try {
            // 删除存储空间。
            ossClient.deleteBucket(bucketName);
        } 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();
            }
        }
    }
} 

(3)Java上传文件

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";

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

        try {
            // 填写字符串。
            String content = "Hello OSS,你好世界";

            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));

            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);
           
            // 上传字符串。
            PutObjectResult result = ossClient.putObject(putObjectRequest);            
        } 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();
            }
        }
    }
}   

(5)Java下载文件

import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。关于其他Region对应的Endpoint信息,请参见访问域名和数据中心。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "exampledir/exampleobject.txt";

         // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        try {
            // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);              

            // 读取文件内容。
            System.out.println("Object content:");
            BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
            while (true) {
                String line = reader.readLine();
                if (line == null) break;

                System.out.println("\n" + line);
            }
            // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
            reader.close();
            // ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。            
            ossObject.close();
       
        } 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 (Throwable 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();
            }
        }
    }
}            

(6)Java删除文件

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写文件完整路径。文件完整路径中不能包含Bucket名称。
        String objectName = "exampleobject.txt";

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

        try {
            // 删除文件或目录。如果要删除目录,目录必须为空。
            ossClient.deleteObject(bucketName, objectName);
        } 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();
            }
        }
    }
}            

(7)Java图片处理

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
        String objectName = "exampleobject.jpg";
        // 填写本地文件的完整路径,例如D:\\localpath\\example-resize.jpg。如果指定的本地文件存在会覆盖,不存在则新建。
        String localPath = "D:\\localpath\\example-resize.jpg";

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

        try {
            // 将图片缩放为固定宽高100 px。
            String style = "image/resize,m_fixed,w_100,h_100";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(style);
            // 将处理后的图片命名为example-resize.jpg并保存到本地。
            // 如果未指定本地路径只填写了本地文件名称(例如example-resize.jpg),则文件默认保存到示例程序所属项目对应本地路径中。
            ossClient.getObject(request, new File(localPath));
        } 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();
            }
        }
    }
}
 
 
 
 


(8)更多参考OSS官方API

七,阿里云短信

7.1,阿里云短信的作用

阿里云短信服务是一种便捷、高效、可靠的短信传送解决方案,适用于多种场景和行业。通过阿里云短信服务,企业可以快速、准确地发送短信验证码、通知和营销信息等。阿里云短信具有以下作用:

首先,阿里云短信可以作为企业进行用户身份验证的途径。在用户注册、找回密码、修改信息等需要验证用户身份的场景中,企业可以通过阿里云短信发送验证码,确保用户身份的准确性和安全性。

其次,阿里云短信可以用于企业与用户之间的通知提醒。例如,在用户购买商品后,企业可以通过阿里云短信向用户发送订单提醒、发货通知、评价邀请等消息,提高用户满意度和忠诚度。

此外,阿里云短信还可以用于企业的营销推广。企业可以根据用户的兴趣爱好和购买行为,制定个性化的营销策略,通过阿里云短信向目标用户发送优惠券、活动信息、新品推荐等消息,提高企业的知名度和销售额。

阿里云短信还具有高可靠性和高到达率的特点。阿里云短信平台拥有完善的服务保障机制和高可用的短信网关,确保短信能够快速、准确地发送到目标用户手中,避免因短信延误或未收到而影响用户体验和业务运营。

7.2,购买阿里云短信包

选择短信包

7.3,使用代码对接阿里云短信

​(1)Java发送短信

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.dysmsapi20170525.models.*;
import com.aliyun.sdk.service.dysmsapi20170525.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class SendSms {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-beijing") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
                                .setEndpointOverride("dysmsapi.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
        // Synchronously get the return value of the API request
        SendSmsResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

(2)Java批量发送短信

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.dysmsapi20170525.models.*;
import com.aliyun.sdk.service.dysmsapi20170525.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class SendBatchSms {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-beijing") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
                                .setEndpointOverride("dysmsapi.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        SendBatchSmsRequest sendBatchSmsRequest = SendBatchSmsRequest.builder()
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<SendBatchSmsResponse> response = client.sendBatchSms(sendBatchSmsRequest);
        // Synchronously get the return value of the API request
        SendBatchSmsResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

(3)PHP发送短信

<?php

// This file is auto-generated, don't edit it. Thanks.
namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;

class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param string $accessKeyId
     * @param string $accessKeySecret
     * @return Dysmsapi Client
     */
    public static function createClient($accessKeyId, $accessKeySecret){
        $config = new Config([
            // 必填,您的 AccessKey ID
            "accessKeyId" => $accessKeyId,
            // 必填,您的 AccessKey Secret
            "accessKeySecret" => $accessKeySecret
        ]);
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        $config->endpoint = "dysmsapi.aliyuncs.com";
        return new Dysmsapi($config);
    }

    /**
     * @param string[] $args
     * @return void
     */
    public static function main($args){
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html
        $client = self::createClient(getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
        $sendSmsRequest = new SendSmsRequest([]);
        $runtime = new RuntimeOptions([]);
        try {
            // 复制代码运行请自行打印 API 的返回值
            $client->sendSmsWithOptions($sendSmsRequest, $runtime);
        }
        catch (Exception $error) {
            if (!($error instanceof TeaError)) {
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            // 如有需要,请打印 error
            Utils::assertAsString($error->message);
        }
    }
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
Sample::main(array_slice($argv, 1));

(4)PHP批量发送短信

<?php

// This file is auto-generated, don't edit it. Thanks.
namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendBatchSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;

class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param string $accessKeyId
     * @param string $accessKeySecret
     * @return Dysmsapi Client
     */
    public static function createClient($accessKeyId, $accessKeySecret){
        $config = new Config([
            // 必填,您的 AccessKey ID
            "accessKeyId" => $accessKeyId,
            // 必填,您的 AccessKey Secret
            "accessKeySecret" => $accessKeySecret
        ]);
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        $config->endpoint = "dysmsapi.aliyuncs.com";
        return new Dysmsapi($config);
    }

    /**
     * @param string[] $args
     * @return void
     */
    public static function main($args){
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html
        $client = self::createClient(getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
        $sendBatchSmsRequest = new SendBatchSmsRequest([]);
        $runtime = new RuntimeOptions([]);
        try {
            // 复制代码运行请自行打印 API 的返回值
            $client->sendBatchSmsWithOptions($sendBatchSmsRequest, $runtime);
        }
        catch (Exception $error) {
            if (!($error instanceof TeaError)) {
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            // 如有需要,请打印 error
            Utils::assertAsString($error->message);
        }
    }
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
Sample::main(array_slice($argv, 1));

八,阿里云SSL安全证书

8.1,阿里云SSL安全证书简介

阿里云SSL安全证书的主要作用是保护网站和在线应用的安全性。这些安全证书通过在服务器和客户端之间建立安全的加密连接,确保数据传输的机密性和完整性。同时,它们还验证了服务器的身份,让用户可以放心地与服务器进行交互,避免遭受中间人攻击等安全威胁。

具体来说,阿里云SSL安全证书可以提供以下几方面的保护:

1. 数据加密:SSL安全证书提供了一种安全套接字层(SSL)协议,该协议可以在服务器和客户端之间建立加密连接,确保数据传输过程中不被窃听或篡改。这种加密机制可以有效地保护敏感信息的机密性,如用户的账号密码、交易信息等。

2. 身份验证:阿里云SSL安全证书还可以验证服务器的身份,让用户可以确定他们正在与真实的服务器进行通信而不是一个假冒的中间人。这种身份验证机制可以帮助用户避免在网络交易中遭受欺诈或被窃取个人信息。

3. 防止恶意软件入侵:阿里云SSL安全证书可以防止恶意软件对网站的入侵。这是因为SSL协议对数据传输进行了加密,使得攻击者无法通过拦截通信来获取有用信息或者植入恶意代码。

4. 提高网站排名:阿里云SSL安全证书还可以提高网站在搜索引擎中的排名。这是因为许多搜索引擎已经开始将网站的安全性作为排名的一个因素,拥有SSL安全证书的网站更有可能获得较好的搜索排名。

总之,阿里云SSL安全证书对于保护网站和在线应用的安全性非常重要。它们可以提供数据加密、身份验证、防止恶意软件入侵以及提高网站排名等多方面的保护措施,确保用户和企业的信息安全。

​8.2,如何申请阿里云安全证书

(1)点击阿里云SSL安全证书购买地址

点击:购买证书

输入:域名,选择:证书类型,选择:证书品牌,选择:证书服务时长。

然后支付相关费用,即可。

(2)按照要求填写相关表格

我这里以CFCA通配符OV证书为例,下载:CFCA 全球信任服务器证书申请表

然后提交,最后过几天会把证书申请下来

(3)部署阿里云SSL到webserver(在Nginx或Tengine服务器安装SSL证书

更多部署请参考:安装证书到服务器_数字证书管理服务-阿里云帮助中心

  1. 登录数字证书管理服务控制台
  2. 在左侧导航栏,单击SSL 证书。
  3. 在SSL证书页面,定位到目标证书,在操作列,单击下载。
  4. 在服务器类型为Nginx的操作列,单击下载

解压缩已下载的SSL证书压缩包。

根据您在提交证书申请时选择的CSR生成方式,解压缩获得的文件不同,具体如下表所示

在Nginx独立服务器、Nginx虚拟主机上安装证书的操作不同,请根据您的实际环境,选择对应的安装步骤。

在Nginx独立服务器上安装证书

执行以下命令,在Nginx的conf目录下创建一个用于存放证书的目录。
 
 cd /usr/local/nginx/conf  #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。
mkdir cert  #创建证书目录,命名为cert。

1.将证书文件和私钥文件上传到Nginx服务器的证书目录 (/usr/local/nginx/conf/cert)

2.编辑Nginx配置文件nginx.conf,修改与证书相关的配置

3.执行以下命令,打开配置文件.

vim /usr/local/nginx/conf/nginx.conf

按i键进入编辑模式。

在nginx.conf中定位到server属性配置

删除行首注释符号#,并根据如下内容进行修改

server {
     #HTTPS的默认访问端口443。
     #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
     listen 443 ssl;
     
     #填写证书绑定的域名
     server_name <yourdomain>;
 
     #填写证书文件名称
     ssl_certificate cert/<cert-file-name>.pem;
     #填写证书私钥文件名称
     ssl_certificate_key cert/<cert-file-name>.key;
 
     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout 5m;
 
     #默认加密套件
     ssl_ciphers HIGH:!aNULL:!MD5;
	 
     #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
     #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
     #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     #ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
 
     #表示优先使用服务端加密套件。默认开启
     ssl_prefer_server_ciphers on;
 
 
    location / {
           root html;
           index index.html index.htm;
    }
}

可选:设置HTTP请求自动跳转HTTPS。

如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点下添加rewrite语句。

server {
    listen 80;
    #填写证书绑定的域名
    server_name <yourdomain>;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
}

配置效果如下图所示:

修改完成后,按Esc键、输入:wq并按Enter键,保存修改后的配置文件并退出编辑模式。

执行以下命令,重启Nginx服务

cd /usr/local/nginx/sbin  #进入Nginx服务的可执行目录。
./nginx -s reload  #重新载入配置文件。

九,阿里云数据库Mysql-RDS

9.1,阿里云MYSQL简介

阿里云MySql数据库的作用主要体现在以下几个方面:

首先,阿里云MySql数据库是一种高性能的数据库管理系统,它为企业提供了快速、可靠、高效的数据存储和访问能力。这种数据库管理系统可以支持大量的并发用户连接,并且可以高效率地处理大量的数据请求,从而确保企业业务的稳定运行。

其次,阿里云MySql数据库支持多种数据存储格式,例如CSV、JSON、XML等,可以满足企业多样化的数据存储需求。同时,阿里云MySql数据库也支持多种数据备份和恢复技术,从而确保企业数据的安全性和完整性。

再次,阿里云MySql数据库提供了强大的事务处理能力,可以实现数据的实时更新、删除、修改等多种操作,并且可以保证数据的完整性和一致性。此外,阿里云MySql数据库还支持多种索引技术,可以大大提高数据查询的速度,从而提升企业应用的性能

最后,阿里云MySql数据库还提供了完善的数据安全保障措施,可以有效地保护企业数据的安全性。它支持多种身份验证模式和访问控制技术,可以防止未授权的访问和恶意攻击,从而确保企业数据的安全性和可靠性。

9.2,购买阿里云MYSQL数据库

点击阿里云MYSQL配置选择页

选择:地区,产品系列,存储类型,CPU,内存,存储空间大小和时长。

就可以把配置定下来了。

9.3,使用阿里云MYSQL

1,点击:数据库实例,就可以看到你的数据库,点击管理

2,在弹出的DMS页面中,填写数据库账号名和密码,然后单击登录

3,登录成功后,在左侧双击目标数据库名称,可以切换数据库

4,创建数据库

使用DMS可以创建数据库,点击:数据库列表

点击:创建数据库

填写:数据库,字符集

5,数据库导出

我们已有的数据库如果要导出,也可以在DMS上进行导出

选中数据库--》点击常用功能--》选中数据库导出

选择:要导出的数据库,导出表:一般选(全部表),导出内容:数据和结构,导出结构类型:一般全选

十,阿里云CDN

10.1,阿里云CDN的简介和作用

阿里云CDN服务能够帮助用户快速地传输和获取互联网上的信息,从而提高用户的使用体验。它可以将用户请求的内容从最近的IDC节点缓存到用户本地网络,减少数据传输距离,加快访问速度。同时,阿里云CDN还具备防DDoS攻击、防盗链、HTTPS加密、7*24小时的技术支持等服务,确保用户信息的安全可靠传输,为用户提供更加稳定、安全的使用体验。此外,阿里云CDN还具备多种控制功能,例如防CC攻击、流量限制、IP黑白名单等,可以有效地保护用户网站的安全性和稳定性。另外,阿里云CDN的价格也是非常合理的,它采用按需计费的方式,用户只需为自己的使用量付费,同时还可以使用优惠券等阿里云生态链系统的福利。总之,阿里云CDN是一种优秀的网络加速服务,可为用户提供更快、更安全、更可靠的服务。

10.2,选择阿里云CDN套餐

点击:购买阿里云CDN

选择:下行流量包,加速区域,加速包大小,有效期。

​10.3,配置使用阿里云CDN

1,在CDN控制台上,添加OSS域名

需要验证该域名的归属权,建议用DNS解析验证

添加:加速区域,加速域名,业务类型

填写:源站信息,OSS域名,优先级,权重,端口

2,在CDN控制台的域名管理页面,复制加速域名对应的CNAME记录值。

4,在阿里云云解析DNS控制台上,配置CNAME

5,在本地PC机上,验证CNAME配置是否生效。

通过ping命令验证

在命令行中ping加速域名,如果返回的解析结果和CDN控制台上该加速域名的CNAME值一致,则表示CDN加速已经生效。 可能要等10分钟才生效

6,设置缓存

使用CDN加速静态资源时,CDN会将源站上的资源缓存到距离客户端最近的CDN节点上。当您访问该静态资源时,可直接从CDN的缓存节点上获取,有效避免通过较长的链路回源,提高资源访问效率。阿里云CDN的所有节点上都包含缓存软件,在用户请求或者源站响应资源经过CDN节点时,缓存软件可以根据需要对用户请求或者源站响应资源做各种处理,包括设置缓存时长、改写回源请求等。

功能说明
配置缓存过期时间以针对静态资源配置指定目录和文件后缀名的缓存过期时间,使其在CDN上按照缓存规则进行缓存
配置状态码过期时间可以配置资源的指定目录或文件后缀名的状态码过期时间。
配置自定义HTTP响应头可以配置资源缓存过期的HTTP消息头。
配置自定义页面可以根据所需自定义HTTP或HTTPS响应状态码跳转的完整URL地址。
配置访问URL改写规则可以对请求的URL进行修改,实现302重定向到目标URL
自定义Cachekey可以将访问同一个文件的一类请求转化为统一的Cachekey,避免不同请求缓存为不同文件的问题,降低回源频率
配置跨域资源共享可以通过自定义HTTP响应头功能配置跨域资源共享。

十一,阿里云点播

11.1,阿里云点播产品简介

阿里云点播产品是一款基于云计算的视频处理和分发平台,旨在为用户提供高效、稳定、安全的视频服务。通过该平台,用户可以轻松上传、转码、存储、分发各类视频内容,实现全方位的视频处理和分发需求。

阿里云点播产品采用先进的技术架构和高效的算法,可支持海量并发访问和高清晰度画质,同时具备多重安全防护措施,能够确保用户视频内容的安全性和稳定性。该平台还支持多种视频格式和编码方式,可根据不同需求进行定制化配置,满足多样化的业务需求。

此外,阿里云点播产品还提供了丰富的API接口和SDK工具,方便用户进行二次开发和集成。用户可根据自己的业务需求,快速搭建个性化的视频服务平台,提高视频处理和分发的效率和质量。同时,阿里云点播产品还提供了完善的售后服务和技术支持,帮助用户解决各类问题,确保用户业务顺利开展。

阿里云点播产品是一款功能强大、高效稳定、安全可靠的视频处理和分发平台,可满足不同行业和场景的视频处理和分发需求。无论你是要进行在线教育、直播互动、视频存储和分享,还是需要为媒体内容提供技术支持,阿里云点播产品都能满足你的要求,帮助你快速实现业务目标。

11.2,选择点播套餐

打开点播下单入口

你首先需要把点播视频,存到点播中,所以需要点播存储资源包。

然后用户需要查看点播中的视频,所以会消耗一定的流量,因此还需要选择视频下行流量包。

因此在选择套餐的时候需要选择点播资源包和流量资源包。

其中区域要选择好。

11.3,使用阿里云点播控制台管理点播

打开点播控制台

点击上传视频或者音频,就可以从本地上传视频音频了。

然后选中音频和视频就可以删除视频音频了。

11.4,使用代码对接点播(以Java为例)

(1)上传视频

public class UploadVideoDemo {
    // 账号AK信息请填写(必选)
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    // 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    public static void main(String[] args) {
    // 视频文件上传
    // 视频标题(必选)
    String title = "测试标题";
    // 1.本地文件上传和文件流上传时,文件名称为上传文件绝对路径,如:/User/sample/文件名称.mp4 (必选)
    // 2.网络流上传时,文件名称为源文件名,如文件名称.mp4(必选)。
    // 3.流式上传时,文件名称为源文件名,如文件名称.mp4(必选)。
    // 任何上传方式文件名必须包含扩展名
    String fileName = "/Users/test/video/test.mp4";
    // 本地文件上传
    testUploadVideo(accessKeyId, accessKeySecret, title, fileName);

    // 待上传视频的网络流地址
    String url = "http://test.aliyun.com/video/test.mp4";

    // 2.网络流上传
    // 文件扩展名,当url中不包含扩展名时,需要设置该参数
    String fileExtension = "mp4";
    testUploadURLStream(accessKeyId, accessKeySecret, title, url, fileExtension);

    // 3.文件流上传
    testUploadFileStream(accessKeyId, accessKeySecret, title, fileName);

    // 4.流式上传,如文件流和网络流
    InputStream inputStream = null;
    // 4.1 文件流
    try {
        inputStream = new FileInputStream(fileName);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    // 4.2 网络流
    try {
        inputStream = new URL(url).openStream();
    } catch (IOException e) {
        e.printStackTrace();
    }
    testUploadStream(accessKeyId, accessKeySecret, title, fileName, inputStream);
}

/**
 * 本地文件上传接口
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 */
private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) {
    UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
    /* 可指定分片上传时每个分片的大小,默认为2M字节 */
    request.setPartSize(2 * 1024 * 1024L);
    /* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/
    request.setTaskNum(1);
    /* 是否开启断点续传, 默认断点续传功能关闭。当网络不稳定或者程序崩溃时,再次发起相同上传请求,可以继续未完成的上传任务,适用于超时3000秒仍不能上传完成的大文件。
    注意:断点续传开启后,会在上传过程中将上传位置写入本地磁盘文件,影响文件上传速度,请您根据实际情况选择是否开启*/
    //request.setEnableCheckpoint(false);
    /* OSS慢请求日志打印超时时间,是指每个分片上传时间超过该阈值时会打印debug日志,如果想屏蔽此日志,请调整该阈值。单位:毫秒,默认为300000毫秒*/
    //request.setSlowRequestsThreshold(300000L);
    /* 可指定每个分片慢请求时打印日志的时间阈值,默认为300s*/
    //request.setSlowRequestsThreshold(300000L);
    /* 是否显示水印(可选),指定模板组ID时,根据模板组配置确定是否显示水印*/
    //request.setIsShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选), Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选) */
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选)*/
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e5****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    //request.setPrintProgress(false);
    /* 设置自定义上传进度回调(必须继承 VoDProgressListener)*/
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 设置您实现的生成STS信息的接口实现类*/
    // request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl());
    /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");

    /* 配置代理访问(可选) */
    //OSSConfig ossConfig = new OSSConfig();
    /* <必填>设置代理服务器主机地址 */
    //ossConfig.setProxyHost("<yourProxyHost>");
    /* <必填>设置代理服务器端口 */
    //ossConfig.setProxyPort(-1);
    /* 设置连接OSS所使用的协议(HTTP或HTTPS),默认为HTTP */
    //ossConfig.setProtocol("HTTP");
    /* 设置用户代理,指HTTP的User-Agent头,默认为aliyun-sdk-java */
    //ossConfig.setUserAgent("<yourUserAgent>");
    /* 设置代理服务器验证的用户名,https协议时需要填 */
    //ossConfig.setProxyUsername("<yourProxyUserName>");
    /* 设置代理服务器验证的密码,https协议时需要填 */
    //ossConfig.setProxyPassword("<yourProxyPassword>");
    //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadVideoResponse response = uploader.uploadVideo(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n");  //请求视频点播服务的请求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
}

/**
 * URL网络流上传。支持断点续传,最大支持48.8TB的单个文件。
 * 该上传方式需要先将网络文件下载到本地磁盘,再进行上传,所以要保证本地磁盘有充足的空间。
 * 当您设置的URL中不包括文件扩展名时,需要单独设置fileExtension,表示文件扩展名。
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileExtension
 * @param url
 */
private static void testUploadURLStream(String accessKeyId, String accessKeySecret, String title, String url, String fileExtension) {
    UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, url);

    /* 文件扩展名*/
    request.setFileExtension(fileExtension);
    /* 网络文件下载连接超时,单位毫秒,0-表示不限制*/
    request.setDownloadConnectTimeout(1000);
    /* 网络文件下载读取超时,单位毫秒,0-表示不限制*/
    request.setDownloadReadTimeout(0);
    /* 网络文件下载后保存的本地目录*/
    request.setLocalDownloadFilePath("/Users/download");
    /* 是否显示水印(可选),指定模板组ID时,根据模板组配置确定是否显示水印*/
    //request.setShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选),Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用) */
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选) */
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选) */
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    //request.setPrintProgress(true);
    /* 设置自定义上传进度回调 (必须继承 VoDProgressListener)*/
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理访问(可选) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>设置代理服务器主机地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>设置代理服务器端口 */
     //ossConfig.setProxyPort(-1);
     /* 设置连接OSS所使用的协议(HTTP或HTTPS),默认为HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 设置用户代理,指HTTP的User-Agent头,默认为aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 设置代理服务器验证的用户名,https协议时需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 设置代理服务器验证的密码,https协议时需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadURLStreamResponse response = uploader.uploadURLStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //请求视频点播服务的请求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
}

/**
 * 文件流上传接口
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 */
private static void testUploadFileStream(String accessKeyId, String accessKeySecret, String title, String fileName) {
    UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName);
    /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/
    //request.setShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选),Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选)*/
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选)*/
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    //request.setPrintProgress(true);
    /* 设置自定义上传进度回调(必须继承 VoDProgressListener)*/
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理访问(可选) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>设置代理服务器主机地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>设置代理服务器端口 */
     //ossConfig.setProxyPort(-1);
     /* 设置连接OSS所使用的协议(HTTP或HTTPS),默认为HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 设置用户代理,指HTTP的User-Agent头,默认为aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 设置代理服务器验证的用户名,https协议时需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 设置代理服务器验证的密码,https协议时需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadFileStreamResponse response = uploader.uploadFileStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //请求视频点播服务的请求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
}

/**
 * 流式上传接口
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 * @param inputStream
 */
private static void testUploadStream(String accessKeyId, String accessKeySecret, String title, String fileName, InputStream inputStream) {
    UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);
     /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/
    //request.setShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选), Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选) */
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选)*/
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    // request.setPrintProgress(true);
    /* 设置自定义上传进度回调(必须继承 VoDProgressListener) */
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    // request.setProgressListener(new PutObjectProgressListener());
     /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理访问(可选) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>设置代理服务器主机地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>设置代理服务器端口 */
     //ossConfig.setProxyPort(-1);
     /* 设置连接OSS所使用的协议(HTTP或HTTPS),默认为HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 设置用户代理,指HTTP的User-Agent头,默认为aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 设置代理服务器验证的用户名,https协议时需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 设置代理服务器验证的密码,https协议时需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);
        
    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadStreamResponse response = uploader.uploadStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n");  //请求视频点播服务的请求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
  }
}

(2)获取视频列表

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.vod20170321.models.*;
import com.aliyun.sdk.service.vod20170321.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class GetVideoList {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/vod
                                .setEndpointOverride("vod.cn-shanghai.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        GetVideoListRequest getVideoListRequest = GetVideoListRequest.builder()
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<GetVideoListResponse> response = client.getVideoList(getVideoListRequest);
        // Synchronously get the return value of the API request
        GetVideoListResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

(3)删除完整视频

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.vod20170321.models.*;
import com.aliyun.sdk.service.vod20170321.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class DeleteVideo {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/vod
                                .setEndpointOverride("vod.cn-shanghai.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        DeleteVideoRequest deleteVideoRequest = DeleteVideoRequest.builder()
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<DeleteVideoResponse> response = client.deleteVideo(deleteVideoRequest);
        // Synchronously get the return value of the API request
        DeleteVideoResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

(4)更多点播API,请参考官方文档

十二,阿里云NAS

12.1,阿里云NAS简介

随着互联网技术的不断发展,数据存储和管理已经成为各行业的关键需求之一。为了满足这一需求,阿里云NAS存储设备被越来越多地应用在多个行业领域中。
首先,阿里云NAS存储设备提供了一系列卓越的功能,包括集中式管理和分布式存储。通过集中式管理,客户可以将分布在多个服务器上的数据存储到一个集中式平台上。这样可以有效地简化数据管理流程,提高存储效率和管理灵活性。
其次,阿里云NAS存储设备还支持多元文件系统、共享访问、数据加密等多种高级功能。多元文件系统可以支持多种不同类型的文件存储,包括图片、视频、文档等。共享访问功能可以方便地实现多用户同时访问同一份数据,协同办公更加高效。数据加密功能可以保证客户数据的安全性和隐私性。
此外,阿里云NAS存储设备还具有高可用性和高可扩展性。高可用性指的是存储设备具有高可靠性和稳定性,可以保证数据的一致性和完整性。高可扩展性指的是存储设备可以方便地扩容和升级,以适应客户业务不断增长的需求。
总之,阿里云NAS存储设备是一个非常可靠、高效、安全的数据存储和管理解决方案。

进入阿里云NAS选择页面
​选择存储类型:通用型,极速型

选择地区,选择存储套餐包

12.2,使用阿里云NAS管理工具管理NAS

(1)创建文件系统

点击:创建文件系统,我这里以通用型NAS为例

12.3,使用API对接NAS(以Java为例)

(1)创建文件系统

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.nas20170626.models.*;
import com.aliyun.sdk.service.nas20170626.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class CreateFileSystem {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/NAS
                                .setEndpointOverride("nas.cn-shanghai.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        CreateFileSystemRequest createFileSystemRequest = CreateFileSystemRequest.builder()
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<CreateFileSystemResponse> response = client.createFileSystem(createFileSystemRequest);
        // Synchronously get the return value of the API request
        CreateFileSystemResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

(2)删除文件系统

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.nas20170626.models.*;
import com.aliyun.sdk.service.nas20170626.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class DeleteFileSystem {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/NAS
                                .setEndpointOverride("nas.cn-shanghai.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        DeleteFileSystemRequest deleteFileSystemRequest = DeleteFileSystemRequest.builder()
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<DeleteFileSystemResponse> response = client.deleteFileSystem(deleteFileSystemRequest);
        // Synchronously get the return value of the API request
        DeleteFileSystemResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

(3)查询文件系统信息

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.nas20170626.models.*;
import com.aliyun.sdk.service.nas20170626.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class DescribeFileSystems {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/NAS
                                .setEndpointOverride("nas.cn-shanghai.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        DescribeFileSystemsRequest describeFileSystemsRequest = DescribeFileSystemsRequest.builder()
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<DescribeFileSystemsResponse> response = client.describeFileSystems(describeFileSystemsRequest);
        // Synchronously get the return value of the API request
        DescribeFileSystemsResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐