Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

这篇具有很好参考价值的文章主要介绍了Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一个成熟的技术架构要有一定的分离性, 平台级的产品一般会这么分:应用服务器、数据库服务器、文件服务器。一般文件、数据库、应用服务器,都应该做逻辑和物理的分离。

以前我们想要做文件上传可能要自己去搭建一个专门的服务器,然后将我们的文件上传到这个服务器上,下载就从我们这个服务器上去进行下载就行了。

但是现在随着技术的发展,像阿里这样的公司给我们开发了好多一些专门的服务器来干这样的事情,根本不用我们自己再去搭建服务器,这样用起来确实可以省很多的事情,我们要做的只是购买一台云服务器,将配置参数配置配置就可以实现文件的上传与下载。

一、OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

大家要注意以下区分

OOS面向对象存储(Object-Oriented Storage,OOS)

OSS,它就是阿里推出的一款云服务器,专门用来做文件存储的,OSS它的存储结构是对象存储,一个key-value的存储结构,它是支持任何非结构化(图片,视频,文件)数据的存储

对象是 OSS 存储数据的基本单元,也被称为 OSS 的文件。OSS 类似于网盘,可以作为网站、app等web应用:包含附件

对象由元信息、用户数据和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。对象元信息是一个键值对,表示对象的一些属性,比如最后修改时间、大小等信息,用户也可以在元信息中存储一些自定义的信息。

OSS服务可作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,

OSS与文件系统的对比

OSS 是一个分布式的对象存储服务,提供的是一个 Key-Value 对形式的对象存储服务。用户可以根据 Object 的名称(Key)唯一的获取该Object的内容。

虽然用户可以使用类似 test1/test.jpg 的名字,但是这并不表示用户的 Object 是保存在test1 目录下面的。对于 OSS 来说,test1/test.jpg 仅仅只是一个字符串,和a.jpg 这种并没有本质的区别。

因此不同名称的 Object 之间的访问消耗的资源是类似的

1、OSS与自建存储对比

对象存储OSS 自建服务器存储
可靠性 OSS作为阿里巴巴全集团数据存储的核心基础设施,多年支撑双11业务高峰,历经高可用与高可靠的严苛考验。OSS的多重冗余架构设计,为数据持久存储提供可靠保障。同时,OSS基于高可用架构设计,消除单节故障,确保数据业务的持续性。服务设计可用性不低于99.995%。数据设计持久性不低于99.9999999999%(12个9)。规模自动扩展,不影响对外服务。数据自动多重冗余备份 受限于硬件可靠性,易出问题,一旦出现磁盘坏道,容易出现不可逆转的数据丢失。人工数据恢复困难、耗时、耗力
安全性  提供企业级多层次安全防护,包括服务端加密、客户端加密、防盗链、IP黑白名单、细粒度权限管控、日志审计、WORM特性等。多用户资源隔离机制,支持异地容灾机制。获得多项合规认证,包括SEC和FINRA 等,满足企业数据安全与合规要求 需要另外购买清洗和黑洞设备。需要单独实现安全机制
成本 多线BGP骨干网络,无带宽限制,上行流量免费。无需运维人员与托管费用,0成本运维 存储受硬盘容量限制,需人工扩容。单线或双线接入速度慢,有带宽限制,峰值时期需人工扩容。需专人运维,成本高
智能存储 提供多种数据处理能力,如图片处理、视频截帧、文档预览、图片场景识别、人脸识别、SQL就地查询等,并无缝对接Hadoop生态、以及阿里云函数计算、EMR、DataLakeAnalytics、BatchCompute、MaxCompute、DBS等产品,满足企业数据分析与管理的需求 需要额外采购,单独部署

2、应用场景

图片和音视频等应用的海量存储

Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

网页或者移动应用的静态和动态资源分离云 

Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

云端数据处理 

Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

3、计量计费

阿里云对象存储 OSS 服务费用的各项组成部分及计费方式分为按量计费和包年包月两种。

按量付费:按实际使用量*单价的方式计费,每小时统计前一小时的实际用量并从账户余额中扣除实际消费金额。例如当前时间是 9:30,结算的是 8:00-9:00 产生的费用 。

包年包月:预先购买指定资源包,之后使用资源时,扣除相应的额度。一般情况下,包年包月比按量付费更加优惠。资源包目前仅提供标准(LRS)存储包、低频(LRS)存储包、归档(LRS)存储包、标准(ZRS)存储包、低频(ZRS)存储包、下行流量包、 回源流量包、传输加速包,可购买地域请参见购买对象存储 OSS 资源包

4、存储空间(Bucket)

存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

同一个存储空间的内部是扁平的,没有文件系统目录的概念,所有的对象都直接隶属于其对应的存储空间。
每个用户可以拥有多个存储空间。
存储空间的名称在 OSS 范围内必须是全局唯一的,一旦创建之后无法修改名称。
存储空间内部的对象数目没有限制。
存储空间的命名规范如下:

只能包括小写字母、数字和短横线(-)。
必须以小写字母或者数字开头和结尾。
长度必须在 3–63 字节之间

5、对象/文件(Object)

对象是 OSS 存储数据的基本单元,也被称为 OSS 的文件。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息

对象的生命周期是从上传成功到被删除为止。在整个生命周期内,只有通过追加上传的Object 可以继续通过追加上传写入数据,其他上传方式上传的 Object 内容无法编辑,您可以通过重复上传同名的对象来覆盖之前的对象。

对象的命名规范如下:

使用 UTF-8 编码
长度必须在 1–1023 字节之间。
不能以正斜线(/)或者反斜线(\)开头

6、Region(地域)

Region 表示 OSS 的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建Bucket。一般来说,距离用户更近的 Region 访问速度更快。
Region 是在创建 Bucket 的时候指定的,一旦指定之后就不允许更改。该 Bucket 下所有的 Object 都存储在对应的数据中心,目前不支持 Object 级别的 Region 设置

7、Endpoint(访问域名)

Endpoint 表示 OSS 对外服务的访问域名。OSS 以 HTTP RESTful API 的形式对外提供服务,当访问不同的 Region 的时候,需要不同的域名。通过内网和外网访问同一个 Region 所需要的 Endpoint 也是不同的。例如杭州 Region 的外网 Endpoint 是 oss-cn-hangzhou.aliyuncs.com,内网 Endpoint 是 osscn-hangzhou-internal.aliyuncs.com

8、AccessKey(访问密钥)

AccessKey(简称 AK)指的是访问身份验证中用到的 AccessKeyId 和 AccessKeySecret。OSS 通过使用 AccessKeyId 和 AccessKeySecret 对称加密的方法来验证某个请求的发送者身份。AccessKeyId 用于标识用户;AccessKeySecret 是用户用于加密签名字符串和 OSS 用来验证签名字符串的密钥,必须保密。对于 OSS 来说,AccessKey 的来源有:

Bucket 的拥有者申请的 AccessKey。
被 Bucket 的拥有者通过 RAM 授权给第三方请求者的 AccessKey
被 Bucket 的拥有者通过 STS 授权给第三方请求者的 AccessKey

注意::

可以登录阿里云官网-“用户中心” -“我的帐户” -“安全认证” 获取 Access Key ID 和 Access KeySecret,一个阿里云帐号可以生成 5 对 Access Key ID 和 Access Key Secret。并支持启用/禁用设置

9、Service

OSS 提供给用户的虚拟存储空间,在这个虚拟空间中,每个用户可拥有一个到多个Bucket

二、文件上传到OSS文件服务器

Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

1、引入阿里依赖

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

2、代码工具类

Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

阿里云OSS  封装的工具类文章来源地址https://www.toymoban.com/news/detail-444172.html

package com.xx.utils;
 
import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.Random;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
 
/**
 * 阿里云 OSS文件类  参考文档  https://help.aliyun.com/product/31815.html?spm=5176.750001.2.8.SZvzsM
 */
public class OssClienUtils {
 
  Log log = LogFactory.getLog(OssClienUtils.class);
  // endpoint以杭州为例,其它region请按实际情况填写
  private String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  // accessKey和accessKeySecret 为购买阿里云服务时官方提供
  private String accessKeyId = "LTAIuB5R5******";
  private String accessKeySecret = "56DOZQ2yRPE8n*****";
  //空间
  private String bucketName = "image";
 
  //文件存储目录    (上传时在key前面加上目录 默认创建)
  private String date = "img/";
 
  private OSSClient ossClient;
 
  public OssClienUtils() {
    ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  }
 
  /**
   * 销毁
   */
  public void destory() {
    ossClient.shutdown();
  }
 
  /**
   * 上传图片 直接获取本地资源路径
   *
   * @param url
   * @throws Exception
   */
  public void uploadImg2Oss(String url) throws Exception {
    File fileOnServer = new File(url);
    FileInputStream fin;
    try {
      fin = new FileInputStream(fileOnServer);
      String[] split = url.split("/");
      this.uploadFile2OSS(fin, split[split.length - 1]);
    } catch (FileNotFoundException e) {
      throw new Exception("图片上传失败");
    }
  }
 
 /**
  * 上传图片
  * @param file
  * @return    key   可根据key获取上到到服务器的志愿和删除等操作
  * @throws Exception
  */
  public String uploadImg2Oss(MultipartFile file,String typeDate) throws Exception {
      this.date=typeDate;
//    if (file.getSize() > 1024 * 1024) {
//      throw new Exception("上传图片大小不能超过1M!");
//    }
    String originalFilename = file.getOriginalFilename();
    String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
    Random random = new Random();
    String name = random.nextInt(10000) + System.currentTimeMillis() + substring;
    try {
      InputStream inputStream = file.getInputStream();
      this.uploadFile2OSS(inputStream, name);
      return name;
    } catch (Exception e) {
      throw new Exception("图片上传失败");
    }
  }
 
  /**
   * 上传到OSS服务器  如果同名文件会覆盖服务器上的
   *
   * @param instream 文件流
   * @param fileName 文件名称 包括后缀名
   * @return 出错返回"" ,唯一MD5数字签名
   */
  public String uploadFile2OSS(InputStream instream, String fileName) {
    String ret = "";
    try {
      //创建上传Object的Metadata
      ObjectMetadata objectMetadata = new ObjectMetadata();
      objectMetadata.setContentLength(instream.available());
      objectMetadata.setCacheControl("no-cache");
      objectMetadata.setHeader("Pragma", "no-cache");
      objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
      objectMetadata.setContentDisposition("inline;filename=" + fileName);
      //上传文件
      PutObjectResult putResult = ossClient.putObject(bucketName, date + fileName, instream, objectMetadata);
      ret = putResult.getETag();
    } catch (IOException e) {
      log.error(e.getMessage(), e);
    } finally {
      try {
        if (instream != null) {
          instream.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return ret;
  }
 
  /**
   * 获得图片路径
   *
   * @param fileUrl
   * @return
   */
  public String getImgUrl(String fileUrl) {
    if (!StringUtils.isEmpty(fileUrl)) {
      String[] split = fileUrl.split("/");
      return this.getUrl(this.date + split[split.length - 1]);
    }
    return null;
  }
 
  /**
   * Description: 判断OSS服务文件上传时文件的contentType
   *
   * @param FilenameExtension 文件后缀
   * @return String
   */
  public static String getcontentType(String FilenameExtension) {
    if (FilenameExtension.equalsIgnoreCase("bmp")) {
      return "image/bmp";
    }
    if (FilenameExtension.equalsIgnoreCase("gif")) {
      return "image/gif";
    }
    if (FilenameExtension.equalsIgnoreCase("jpeg") ||
        FilenameExtension.equalsIgnoreCase("jpg") ||
        FilenameExtension.equalsIgnoreCase("png")) {
      return "image/jpeg";
    }
    if (FilenameExtension.equalsIgnoreCase("html")) {
      return "text/html";
    }
    if (FilenameExtension.equalsIgnoreCase("txt")) {
      return "text/plain";
    }
    if (FilenameExtension.equalsIgnoreCase("vsd")) {
      return "application/vnd.visio";
    }
    if (FilenameExtension.equalsIgnoreCase("pptx") ||
        FilenameExtension.equalsIgnoreCase("ppt")) {
      return "application/vnd.ms-powerpoint";
    }
    if (FilenameExtension.equalsIgnoreCase("docx") ||
        FilenameExtension.equalsIgnoreCase("doc")) {
      return "application/msword";
    }
    if (FilenameExtension.equalsIgnoreCase("xml")) {
      return "text/xml";
    }
    return "image/jpeg";
  }
 
  /**
   * 获得url链接
   *
   * @param key
   * @return
   */
  public String getUrl(String key) {
    // 设置URL过期时间为10年  3600l* 1000*24*365*10
    Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
    // 生成URL
    URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
    if (url != null) {
      return url.toString();
    }
    return null;
  }
 
  /**
   * 删除单个文件
   */
  public void delFile(String key){
      ossClient.deleteObject(bucketName, key);
  }
 
}

到了这里,关于Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 尚融宝16-集成阿里云对象存储OSS服务

    目录 一、开通“对象存储OSS”服务 1、开通“对象存储OSS”服务 二、控制台使用 1、创建Bucket 2、上传默认头像 三、使用RAM子用户 1、进入子用户管理页面 2、设置权限 四、使用SDK 五、创建测试项目 1、创建Maven项目 2、配置pom 六、测试用例 七、将OSS整合进项目 1、基本配置

    2024年02月13日
    浏览(52)
  • 【业务功能篇77】微服务-OSS对象存储-上传下载图片

    3. 图片管理 文件存储的几种方式 单体架构可以直接把图片存储在服务器中 但是在分布式环境下面直接存储在WEB服务器中的方式就不可取了,这时我们需要搭建独立的文件存储服务器。 3.1 开通阿里云服务 针对本系统中的相关的文件,图片,文本等统一的交给云服务器管理。

    2024年02月11日
    浏览(48)
  • Unity 上传文件到阿里云 对象存储OSS服务器

    首先登录阿里云 免费试用–对象存储OSS --点击立即试用,可以有三个月的免费试用 创建Buket 新建AccessKey ,新建完成后,会有一个CSV文件,下载下来,里面有Key ,代码中需要用到 下载SDK 双击打开 sln文件,使用VS打开,右键项目–属性,修改程序集名字,然后点击生成–生成解

    2024年02月13日
    浏览(58)
  • 如何简单快速搭建自己的云对象存储服务(OSS)

    简单来说,其实我们只需要有一台服务器,利用服务器的各种资源,搭配其它厂商开发的软件,就能很轻易拥有自己的云对象存储服务。不需要在阿里云上花钱买什么服务,甚至还能自己给别人提供服务,真的是太爽了。 我们所熟知的云对象存储服务,接触最多的肯定是阿里

    2024年02月02日
    浏览(40)
  • 【开发环境】(阿里云分布式文件系统)对象存储OSS 服务配置

    目录 一、开通 “对象存储 OSS” 服务: 二、创建 Bucket 容器: 1.创建一个Bucket: 三、使用 OSS 对象存储: 四、使用 SDK 访问 OSS: 1.安装使用 OSS SDK: 2.SDK 配置和测试:         进入阿里云官网: https://www.aliyun.com/ https://www.aliyun.com/         进入到 OSS 对象存储的管理平台

    2024年02月02日
    浏览(48)
  • 尚医通day11-Java中阿里云对象存储OSS

    用户登录成功后都要进行身份认证,认证通过后才可以预约挂号。 认证过程:用户填写基本信息(姓名、证件类型、证件号码和证件照片),提交平台审核 用户认证相关接口: (1)上传证件图片 (2)提交认证 (3)获取认证信息 用户认证需要上传证件图片,因此我们要做

    2024年02月08日
    浏览(86)
  • Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】

    前言 以下只提供一种思路,对新手可能不太友好。 这里将前端Vue上传的图片直接存储到服务器上, Alibaba Cloud OSS : 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储

    2024年02月06日
    浏览(58)
  • Linux服务器上传文件到阿里云oss对象存储的两种方法ossutil、curl

    ossutil支持在Windows、Linux、macOS等系统中运行,您可以根据实际环境下载和安装合适的版本。 安装过程中,需要使用解压工具(unzip、7z)解压软件包,请提前安装其中的一个解压工具。 yum -y install unzip Linux系统一键安装 sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo b

    2024年02月13日
    浏览(51)
  • 【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)

    查看Java Storage SDK,想找一个 uploadWithResponse  的示例代码,但是通过全网搜索,结果没有任何有帮助的代码。使用最近ChatGPT来寻求答案,得到非常有格式的内容: 问:java azure storage account to use uploadWithResponse 答:To use the uploadWithResponse method with the Azure Blob Storage client library

    2024年02月03日
    浏览(45)
  • 阿里云-对象存储OSS

    大家好,我是 码赛客1024 ,今天我们一起来学习阿里云的对象存储服务OSS。 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。 简单

    2024年01月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包