最近在做一个新的项目,从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的存储效果

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的访问endPoint地址,我的Bucket上信息显示oss-cn-hangzhou-am24-a.**.lab.com,用这个地址一直不能上传,之后我改成地址前面加BucketName:bucket-for-rds.oss-cn-hangzhou-am24-a.**.lab.com才好使。

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

数据备份的OSS接口的更多相关文章

  1. 混合云存储组合拳:基于云存储网关与混合云备份的OSS数据备份方案

    前言 阿里云对象存储(OSS)用户众多.很多用户因为业务或者合规性需求,需要对OSS内的数据做备份,无论是线上备份,还是线下备份.用户可以选择使用OSS的开放API,按照业务需求,做数据的备份,也可以 ...

  2. 开源服务专题之-------rsync数据备份

    RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据.可以镜像保存整个目录 ...

  3. MySQL(十五)之数据备份中mysqldump详解

    前言 其实前面一篇数据备份已经是非常的详细了,这里我想单独的讲解一下mysqldump,相信很多程序员都是用过这个命令的! 一.MySQL数据库的备份与还原 1.1.MySQL数据库备份 1)语法 m ...

  4. MongoDB 常用的数据备份梳理汇总

    1.基于数据文件的备份 直接将原始的数据文件Copy至备份的地方,这个方法的优点是比较快,因为备份和恢复都不需要转换数据格式.缺点就是需要锁住数据库服务器,但是此方案通常备份是在从节点上进行,备份过程 ...

  5. Saiku去掉License验证信息以及数据备份(二十一)

    Saiku去掉License验证信息 终于还是走到了这一步,老早就在说要去掉这个License验证了,一直没做因为忙着别的.但是因为这个License还和可定义的用户数相关,限制了我们的使用,所以这里 ...

  6. 阿里云数据库备份DBS商业化发布,数据库实时备份到OSS

    数据库备份DBS已于2018年5月17日正式商业化发布. 数据库备份(Database Backup,简称DBS)是为数据库提供连续数据保护.低成本的备份服务. 它可以为多种环境的数据提供强有力的保护 ...

  7. Kubernetes-3.3:ETCD集群搭建及使用(https认证+数据备份恢复)

    etcd集群搭建 环境介绍 基于CentOS Linux release 7.9.2009 (Core) ip hostname role 172.17.0.4 cd782d0a790b etcd1 ...

  8. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  9. redis主从复制 从而 数据备份和读写分离

    蜗牛Redis系列文章目录http://www.cnblogs.com/tdws/tag/NoSql/ 爬虫转载注明地址本文地址—博客园蜗牛 http://www.cnblogs.com/tdws/p ...

随机推荐

  1. (转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)

    前言: 上节用纯linux的函数实现了和云端通讯, 本节开始利用传说中的神器libcurl 话说一个网络程序员对书法十分感兴趣,退休后决定在这方面有所建树. 于是花重金购买了上等的文房四宝.    一 ...

  2. CSharpGL(13)用GLSL实现点光源(point light)和平行光源(directional light)的漫反射(diffuse reflection)

    CSharpGL(13)用GLSL实现点光源(point light)和平行光源(directional light)的漫反射(diffuse reflection) 2016-08-13 由于CSh ...

  3. web全栈开发之网站开发一(Mac环境配置)

    个人第一次写博客,想给大家分享的是PHP+HTML5+MySQL开发一个个人网站所需的部分技术,希望能帮到志同道合和开发者,别人小白高手勿喷就行 先说一下我在制作这个网站之前的配置: 我用的是MacB ...

  4. Objective-C 生成器模式 -- 简单实用和说明

    1.生成器模式的定义 将一个复杂的对象的构件与它的表示分离,使得同样的构建过程可以创建不同的表示 2.生成器模式的UML Builder :生成器接口,定义创建一个Product各个部件的操作 Con ...

  5. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...

  6. HTML5系列目录

    1. HTML5与HTML4的区别 2. HTML5结构 3. HTML5表单 4. HTML5文件 5. HTML5绘图 6. HTML6本地存储

  7. 在SQL Server中为什么不建议使用Not In子查询

        在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: 结果不准确 查询性能低下       下面 ...

  8. 【原】SDWebImage源码阅读(四)

    [原]SDWebImage源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 SDWebImage中主要实现了NSURLConnectionDataDelega ...

  9. Python标准模块--concurrent.futures

    1 模块简介 concurrent.futures模块是在Python3.2中添加的.根据Python的官方文档,concurrent.futures模块提供给开发者一个执行异步调用的高级接口.con ...

  10. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...