阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

阿里云数据备份的OSS接口

215次阅读
没有评论

共计 3691 个字符,预计需要花费 10 分钟才能阅读完成。

最近在做一个新的项目,从 RDS 备份到 OSS,进行数据备份以及后续的还原。这边对阿里云的 OSS 数据上传接口进行说明,先做下笔记先简单介绍下 OSS:

①Object

在 OSS 中,用户操作的基本数据单元是 Object。单个 Object 最大允许存储 5TB 的数据。Object 包含 key、meta 和 data。其中,key 是 Object 的名字;meta 是用户对该 object 的描述,由一系列 name-value 对组成;data 是 Object 的数据。

其中 Object 命名规范:使用 UTF- 8 编码;长度必须在 1 -1023 字节之间;不能以“/”或者“\”字符开头。

命名 demo1:example.txt 这个在 Bucket 内存储的就是一个文件。

命名 demo2:cd/example.txt 这个在 Bucket 内存储的就是一个文件夹的形式,一级目录是 cd,二级目录才是文件 example.txt。等下我会在下面的 demo 实例中给出截图。

②Bucket

存储在 OSS 上的每个 Object 必须都包含在某个 Bucket 中。这个去阿里的 OSS 上注册 OSS 实体 Bucket。系统会给用户分配一对 Access Key ID 和 Access Key Secret,称为 ID 对,用于标识用户,为访问 OSS 的每个 Bucket 做签名验证。

1)文件存储到 OSS:

我们使用的是 OSSClient 中的方法 public PutObjectResult putObject(String bucketName, String key,  File file, ObjectMetadata metadata)

参数介绍:

bucketName:你的 Bucket 名称

key: 就是你存储 Object 的路径,也就是上面介绍的 Object 命名。like:”example.tar”

file: 你存储到 OSS 上的文件

metadata:ObjectMetaData 是用户对该 object 的描述,由一系列 name-value 对组成。这里我们直接设为空。

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

import Java.io.File;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by XuHui on 2016/9/28.
 */
public class TestJava {static  String accessKeyId = "Your Access Key ID";// 你注册 OSS 建立实例 Bucket 的 accessKeyId 和 accessKeySecret
    static  String accessKeySecret = "Your Access Key Secret";
    static  String endPoint = "OSS url";//OSS 的访问地址 
    static String bucketName = "bucket-example";//Bucket 的名称 
    public static  void main(String[] rags)throws Exception{// 上传的 File
        File file = new File("C:\\Users\\Desktop\\example.tar");
        OSSClient ossClient = new OSSClient(endPoint, accessKeyId, accessKeySecret);
        //objKey 是存储到 Bucket 的 Object 的相对路径 
        String objKey = "example.tar";
        ObjectMetadata objMetadata = new ObjectMetadata();//objMetadata 可为空 
        PutObjectResult result = ossClient.putObject(bucketName, objKey, file, objMetadata);
        System.out.print("PutObjectResult" + result + "," + result.getETag());

    }
}

  看看 Bukect 的存储效果

阿里云数据备份的 OSS 接口

2)URL 下载内容存储到 OSS:

我们使用的是 OSSClient 中的方法 public PutObjectResult putObject(String bucketName, String key, InputStream input, ObjectMetadata metadata)

参数介绍:

bucketName:你的 Bucket 名称

key: 就是你存储 Object 的路径,也就是上面介绍的 Object 命名。like:”cd/example.tar”

input: 也就是输入流,这个我们把 Url 内容存储到 OSS 的 Bukect 上,其实也就是转化为流的方式进行存储的。这样做的目的主要就是 url 下载 File,把 File 上传到 OSS,这样会大大影响存储速率。所以在项目中数据备份都是通过流的方式,而不是建立中间临时文件。

metadata:ObjectMetaData 是用户对该 object 的描述,由一系列 name-value 对组成。这里我们直接设为空。

注:获取流的方法除了我下面写的,还有我注释掉的 bis = url.openStream() 这种方法同样可以获取到 InputStream。

 
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by XuHui on 2016/9/28.
 */
public class TestJava {static  String accessKeyId = "Your Access Key ID";// 你注册 OSS 建立实例 Bucket 的 accessKeyId 和 accessKeySecret
    static  String accessKeySecret = "Your Access Key Secret";
    static  String endPoint = "OSS url";//OSS 的访问地址 
    static  String bucketName = "bucket-example";//Bucket 的名称 
    public static  void main(String[] rags)throws Exception{// 上传的 Url 地址 
        String path = "Your Download Url";
        URL url = new URL(path.trim());
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        InputStream bis = urlConnection.getInputStream();
        //bis = url.openStream();
        // 创建 OSSClient
        OSSClient ossClient = new OSSClient(endPoint, accessKeyId, accessKeySecret);
        //objKey 是存储到 Bucket 的 Object 的相对路径 
        String objKey = "cd/example.tar";
        ObjectMetadata objMetadata = new ObjectMetadata();//objMetadata 可为空 
        PutObjectResult result = ossClient.putObject(bucketName, objKey, bis, objMetadata);
        System.out.print("PutObjectResult" + result + "," + result.getETag());

    }
}

下面直接看下存储的 Bucket 效果吧

阿里云数据备份的 OSS 接口

      这边我说一个这个程序很奇怪的问题,这边我自己弄了好久。OSS 的访问 endPoint 地址,我的 Bucket 上信息显示 oss-cn-hangzhou-am24-a.**.lab.com,用这个地址一直不能上传,之后我改成地址前面加 BucketName:bucket-for-rds.oss-cn-hangzhou-am24-a.**.lab.com 才好使。

这个遇到的同学还可以尝试 endPoint 前面加 BukectName,这个我猜测可能是公有云和私有云的区别,有了解的同学可以交流一下。最近一直在做数据存储方面的项目,如果描述或者程序有错,请指出,谢谢~

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138745.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计3691字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中