YuXuan
发布于 2020-09-10 / 15 阅读
0

OSS云储存实战

快速入门

  1. 案例描述
    图片上传
  2. 配置环境
    pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.oss</groupId>
  <artifactId>oss-project01</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.5</version>
      </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.8.0</version>
    </dependency>
  </dependencies>

</project>
  1. 图片上传代码实现
package com.oss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class FileUpLoad {
  public static void main(String[] args) throws FileNotFoundException {
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    //String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    String endpoint = "http://oss-cn-beijing.aliyuncs.com";
    // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践 创建并使用RAM子账号进行API访问或日常运维,
    String accessKeyId = "LTAI4GD1XcQgrQuvkKnZYhhA";
    String accessKeySecret = "1n2i3VNxd5gWr9YPYuJbVMophsXUQr";

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

    // 上传文件流。
    InputStream inputStream = new FileInputStream(new File("src\\main\\resources\\1.png"));
    ossClient.putObject("test-imgs", "1.png", inputStream);

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

java API操作

  1. 需求描述
    1)创建Bucket
    2)把字符串存入OSS,Object的名称为firstKey
    3)下载文件
    4)文件存储入OSS
    5)查看Bucket中的Object
    6)删除Object
  2. 功能实现
    pom.xml 同上一个例子
    代码实现
package com.oss;

import java.io.*;
import java.util.List;
import java.util.Properties;

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.BucketInfo;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class HelloOSS {
  static Logger logger = Logger.getLogger(HelloOSS.class);

  // endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket,请在控制台上查看域名。
  // 如果您还没有创建Bucket,endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”,
  // 链接地址是:https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
  // endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”,注意http://后不带bucket名称,
  // 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”,是错误的endpoint,请去掉其中的“bucket-name”。
  private static String endpoint = "http://oss-cn-beijing.aliyuncs.com";
  // accessKeyId和accessKeySecret是OSS的访问密钥,您可以在控制台上创建和查看,
  // 创建和查看访问密钥的链接地址是:https://ak-console.aliyun.com/#/。
  // 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
  private static String accessKeyId = "LTAI4GD1XcQgrQuvkKnZYhhA";
  private static String accessKeySecret = "1n2i3VNxd5gWr9YPYuJbVMophsXUQr";
  // Bucket用来管理所存储Object的存储空间,详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
  // Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
  private static String bucketName = "test-imgs";
  // Object是OSS存储数据的基本单元,称为OSS的对象,也被称为OSS的文件。详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
  // Object命名规范如下:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
  private static String firstKey = "my-first-key";

  public static void main(String[] args) throws IOException {
    // 日志配置,OSS Java SDK使用log4j记录错误信息。示例程序会在工程目录下生成“ossdemo.log”日志文件,默认日志级别是INFO。
    // 日志的配置文件是“conf/log4j.properties”,如果您不需要日志,可以没有日志配置文件和下面的日志配置。
    // PropertyConfigurator.configure("conf/log4j.properties");
    InputStream in = HelloOSS.class.getClassLoader().getResourceAsStream("log4j.properties");
    Properties properties = new Properties();
    properties.load(in);
    PropertyConfigurator.configure(properties);
    logger.info("Started");

    // 生成OSSClient,您可以指定一些参数,详见“SDK手册 > Java-SDK > 初始化”,
    // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/init.html?spm=5176.docoss/sdk/java-sdk/get-start
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    try {
      // 判断Bucket是否存在。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
      // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/
      manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
      if (ossClient.doesBucketExist(bucketName)) {
        System.out.println("您已经创建Bucket:" + bucketName + "。");
      } else {
        System.out.println("您的Bucket不存在,创建Bucket:" + bucketName + "。");
        // 创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
        // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
        ossClient.createBucket(bucketName);
      }

      // 查看Bucket信息。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
      // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
      BucketInfo info = ossClient.getBucketInfo(bucketName);
      System.out.println("Bucket " + bucketName + "的信息如下:");
      System.out.println("\t数据中心:" + info.getBucket().getLocation());
      System.out.println("\t创建时间:" +
      info.getBucket().getCreationDate());
      System.out.println("\t用户标志:" + info.getBucket().getOwner());

      // 把字符串存入OSS,Object的名称为firstKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
      // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
      InputStream is = new ByteArrayInputStream("Hello OSS".getBytes());
      ossClient.putObject(bucketName, firstKey, is);
      System.out.println("Object:" + firstKey + "存入OSS成功。");
      // 下载文件。详细请参看“SDK手册 > Java-SDK > 下载文件”。
      // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/download_object.html?spm=5176.docoss/sdk/java-sdk/manage_object
      OSSObject ossObject = ossClient.getObject(bucketName, firstKey);
      InputStream inputStream = ossObject.getObjectContent();
      StringBuilder objectContent = new StringBuilder();
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
      while (true) {
        String line = reader.readLine();
        if (line == null)
          break;
        objectContent.append(line);
      }
      inputStream.close();
      System.out.println("Object:" + firstKey + "的内容是:" + objectContent);

      // 文件存储入OSS,Object的名称为fileKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
      // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
      String fileKey = "README.md";
      ossClient.putObject(bucketName, fileKey, new File("src\\main\\resources\\README.md"));
      System.out.println("Object:" + fileKey + "存入OSS成功。");

      // 查看Bucket中的Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
      // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
      ObjectListing objectListing = ossClient.listObjects(bucketName);
      List<OSSObjectSummary> objectSummary = objectListing.getObjectSummaries();
      System.out.println("您有以下Object:");
      for (OSSObjectSummary object : objectSummary) {
        System.out.println("\t" + object.getKey());
      }

      // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
      // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/javasdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
      ossClient.deleteObject(bucketName, firstKey);
      System.out.println("删除Object:" + firstKey + "成功。");
      ossClient.deleteObject(bucketName, fileKey);
      System.out.println("删除Object:" + fileKey + "成功。");
    } catch (OSSException oe) {
      oe.printStackTrace();
    } catch (ClientException ce) {
      ce.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      ossClient.shutdown();
    }
    logger.info("Completed");
  }
}

log4j.properties

log4j.rootLogger=INFO, RFA

ossdemo.log.dir=.
ossdemo.log.file=oss-demo.log

# Logging Threshold
log4j.threshold=ALL

# Null Appender
log4j.appender.NullAppender=org.apache.log4j.varia.NullAppender

#
# Rolling File Appender - cap space usage at 5gb.
#
ossdemo.log.maxfilesize=256MB
ossdemo.log.maxbackupindex=20
log4j.appender.RFA=org.apache.log4j.RollingFileAppender
log4j.appender.RFA.File=${ossdemo.log.dir}/${ossdemo.log.file}

log4j.appender.RFA.MaxFileSize=${ossdemo.log.maxfilesize}
log4j.appender.RFA.MaxBackupIndex=${ossdemo.log.maxbackupindex}

log4j.appender.RFA.layout=org.apache.log4j.PatternLayout

# Pattern format: Date LogLevel LoggerName LogMessage
log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
# Debugging Pattern format
#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
#
# Daily Rolling File Appender
#

log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRFA.File=${ossdemo.log.dir}/${ossdemo.log.file}

# Rollver at midnight
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

# 30-day backup
#log4j.appender.DRFA.MaxBackupIndex=30
log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout

# Pattern format: Date LogLevel LoggerName LogMessage
log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
# Debugging Pattern format
#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
#
# console
# Add "console" to rootlogger above if you want to use this
#

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}:%m%n

image.png

SpringBoot整合OSS上传

  1. 需求描述
    使用SpringBoot完成上传图片
  2. 配置文件
    pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.oss</groupId>
  <artifactId>oss-project02</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!--spring boot的支持-->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
  </parent>

  <dependencies>
    <!--springboot 测试支持-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>2.8.3</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.7</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.4</version>
    </dependency>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.9</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
</project>

application.properties

# Spring boot application
#server.servlet.context-path=/oss-server
server.port = 8999
#logging.level.root=DEBUG

aliyun.properties

aliyun.endpoint=http://oss-cn-beijing.aliyuncs.com
aliyun.accessKeyId=LTAI4GD1XcQgrQuvkKnZYhhA
aliyun.accessKeySecret=1n2i3VNxd5gWr9YPYuJbVMophsXUQr
aliyun.bucketName=test-imgs
aliyun.urlPrefix=https://test-imgs.oss-cn-beijing.aliyuncs.com/
  1. 编码实现
    AliyunConfig
package com.oss.config;
import com.aliyun.oss.OSSClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource("classpath:aliyun.properties")
@ConfigurationProperties(prefix = "aliyun")
@Data
public class AliyunConfig {

  private String endpoint;
  private String accessKeyId;
  private String accessKeySecret;
  private String bucketName;
  private String urlPrefix;

  @Bean
  public OSSClient oSSClient() {
    return new OSSClient(endpoint, accessKeyId, accessKeySecret);
  }
}

实体对象

package com.oss.bean;
import lombok.Data;

@Data
public class UpLoadResult {

  // 文件唯一标识
  private String uid;
  // 文件名
  private String name;
  // 状态有:uploading done error removed
  private String status;
  // 服务端响应内容,如:'{"status": "success"}'
  private String response;

}

FileUpLoadService

package com.oss.service;

import com.aliyun.oss.OSSClient;
import com.oss.bean.UpLoadResult;
import com.oss.config.AliyunConfig;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;

@Service
public class FileUpLoadService {

  @Autowired
  private AliyunConfig aliyunConfig;

  @Autowired
  private OSSClient ossClient;

  // 允许上传的格式
  private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".gif", ".png"};

  public UpLoadResult upload(MultipartFile uploadFile) {
    // 校验图片格式
    boolean isLegal = false;
    for (String type : IMAGE_TYPE) {
      if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
        isLegal = true;
        break;
      }
    }

    UpLoadResult uploadResult = new UpLoadResult();
    if (!isLegal) {
      uploadResult.setStatus("error");
      return uploadResult;
    }

    String fileName = uploadFile.getOriginalFilename();
    String filePath = getFilePath(fileName);

    try {
      ossClient.putObject(aliyunConfig.getBucketName(),filePath, new ByteArrayInputStream(uploadFile.getBytes()));
    } catch (IOException e) {
      e.printStackTrace();
      //上传失败
      uploadResult.setStatus("error");
      return uploadResult;
    }
    uploadResult.setStatus("done");
    uploadResult.setName(this.aliyunConfig.getUrlPrefix() + filePath);
    uploadResult.setUid(String.valueOf(System.currentTimeMillis()));
    return uploadResult;
  }

  private String getFilePath(String sourceFileName) {
    DateTime dateTime = new DateTime();
    return "images/" + dateTime.toString("yyyy") + "/" + dateTime.toString("MM") + "/" + dateTime.toString("dd") + "/" + UUID.randomUUID().toString() + "." + StringUtils.substringAfterLast(sourceFileName, ".");
  }
}

UpLoadController 控制器

package com.oss.controller;

import com.oss.bean.UpLoadResult;
import com.oss.service.FileUpLoadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@RequestMapping("/pic")
@Controller
public class UpLoadController {

  @Autowired
  private FileUpLoadService fileUpLoadService;

  @PostMapping("/upload")
  @ResponseBody
  public UpLoadResult upload(@RequestParam("file") MultipartFile multipartFile) {
    return this.fileUpLoadService.upload(multipartFile);
  }
}

ApplicationBoot 启动引导

package com.oss;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ApplicationBoot {

  public static void main(String[] args) {
    SpringApplication.run(ApplicationBoot.class, args);
  }
}
  1. 测试
    image.png
    image.png

数据处理

介绍

阿里云OSS为在云上的数据打通了一个处理与使用的快速通道。通过简单的 RESTful 接口,可以在任何时间、任何地点、任何互联网设备上对存储在OSS中的数据进行分析处理。
数据处理包含以下两种:

  • 阿里云OSS原生处理服务
    阿里云OSS原生处理服务包括图片处理和视频截帧,其中图片处理包括图片的缩略、剪裁、参数调节等。 OSS原生处理服务无需开通,默认集成在OSS中,创建完Bucket后即可使用。产生的数据处理费用直接在OSS上结算。
  • 智能媒体管理服务
    阿里云OSS与智能媒体管理(IMM)深度结合,支持文档预览、文档格式转换、人脸识别、图片分析、二维码识别等丰富的数据分析处理操作。

图片处理

本文档介绍如何快速使用OSS图片处理服务。您可以通过三种方式处理图片:为图片URL添加参数进行单次处理、使用图片样式对不同图片进行相同处理,或使用OSS SDK对图片进行处理。

处理操作说明文档
图片缩放对图片进行等比缩放或固定宽高缩放。图片缩放
图片裁剪使用内切圆裁剪图片。内切圆
通过指定范围的方式裁剪图片。自定义裁剪
将图片在x或y轴上等分为多个区域,然后取出指定区域。索引切割
使用圆角矩形裁剪图片。圆角矩形
图片旋转设置是否对图片进行自动旋转自适应方向
对图片进行指定角度的顺时针旋转。旋转
图片效果为图片添加模糊效果。模糊效果
调整图片的亮度。亮度
对图片进行锐化。锐化
调整图片的对比度。对比度
格式转换将图片转换为指定的格式。格式转换
可以对保存为JPG或WebP格式的图片进行图片质量转换。质量变换
指定图片的呈现方式。渐进显示
获取图片信息获取图片的平均色调。获取图片主色调
获取图片的宽度、长度、文件大小、格式、EXIF信息等。获取信息
图片水印为图片添加图片、文字或混合水印。图片水印

视频截祯

注意事项

  • 当前仅支持对视频编码格式为H264的视频文件进行视频截帧。
  • OSS当前没有默认保存视频截帧的操作,视频截帧的图片需手动下载到本地。

参数说明
操作名称:snapshot

参数描述取值范围
t指定截图时间。[0,视频时长] 单位:ms
w指定截图宽度,如果指定为0,则自动计算。[0,视频宽度] 单位:像素(px)
h指定截图高度,如果指定为0,则自动计算;如果w和h都为0,则输出为原视频宽高。[0,视频高度] 单位:像素(px)
m指定截图模式,不指定则为默认模式,根据时间精确截图。如果指定为fast,则截取该时间点之前的最近的一个关键帧。枚举值:fast
f指定输出图片的格式。枚举值:jpg、png
ar指定是否根据视频信息自动旋转图片。如果指定为auto,则会在截图生成之后根据视频旋转信息进行自动旋转。枚举值:auto

https://help.aliyun.com/document_detail/64555.html

音视频处理

存储在OSS上的多媒体音视频数据,可以通过经济、弹性、高扩展的阿里云媒体转码服务,转换成适合在移动端、PC、TV上播放的格式。
媒体转码核心能力包括:

  • 转换媒体格式,支持多平台播放。
  • 保证相同画质质量的前提下,调整视频码率、提高视频压缩效率、减小文件体积,从而减少播放卡顿并节省存储空间和流量费用。
  • 添加水印logo,突出品牌,增加产品识别度。
  • 对视频进行剪辑/拼接等二次创作。
  • 针对画质较差的视频,去除画面中的毛刺、马赛克等,修复为高清晰版本。

音视频转码

智能媒体管理(IMM)

阿里云 OSS 能够与智能媒体管理(IMM)深度结合,支持文档预览、文档格式转换、人脸识别、图片分析、二维码识别等丰富的数据分析处理操作。下面介绍如何在 OSS 控制台中使用 IMM 的功能。
前提条件

  • 要在 OSS 中使用 IMM 功能,您需要开通 IMM 服务并进行授权。有关开通服务及授权的详细步骤,请参见开通产品创建项目中的前提条件部分。
  • 如果您使用 RAM 子账号进行本文中的操作,需要同时开通对应存储空间的访问权限和 AliyunIMMFullAccess 权限。
  • 创建 IMM Project 及使用 IMM 功能会产生一定的费用,如果您不需要使用 IMM 的功能,请及时解绑 IMM。详细费用请参见计费说明

https://test-imgs.oss-cn-beijing.aliyuncs.com/1.png?x-ossprocess=imm/detecface
https://test-imgs.oss-cn-beijing.aliyuncs.com/1.png?x-ossprocess=imm/tagimage

CDN 加速 (阿里 网宿 微软 亚马逊 akmai)

对象存储OSS与阿里云CDN服务结合,可优化静态热点文件下载加速的场景(即同一地区大量用户同时下载同一个静态文件的场景)。您可以将OSS的存储空间(Bucket)作为源站,利用阿里云CDN将源内容发布到边缘节点。当大量终端用户重复访问同一文件时,可以直接从边缘节点获取已缓存的数据,提高访问的响应速度。
image.png
image.png
适用场景:

  • 静态文件访问量大,服务器负载高,I/O问题导致用户访问卡顿。
  • 静态文件数量大,服务器存储空间不够。
  • 静态文件用户访问分布在各地,同一个地区客户,会成千上万次重复下载同一文件。

https://www.aliyun.com/product/cdn