程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 數據備份的OSS接口,數據備份OSS接口

數據備份的OSS接口,數據備份OSS接口

編輯:JAVA綜合教程

數據備份的OSS接口,數據備份OSS接口


最近在做一個新的項目,從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,這個我猜測可能是公有雲和私有雲的區別,有了解的同學可以交流一下。最近一直在做數據存儲方面的項目,如果描述或者程序有錯,請指出,謝謝~

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved