天天看點

對象存儲OSS如何通過PutObject上傳檔案?

遷移OSS的檔案,就是将使用者其他資料源的檔案遷移至OSS。接下來幾篇文章将介紹的方法是以下四種:一、通過API/SDK上傳檔案;二、通過API/SDK拷貝檔案;三、通過oss-import工具遷移檔案;四、通過雲市場服務遷移檔案。

通過API/SDK的方式上傳檔案以完成資料遷移的工作。衆所周知,OSS所有的操作都是基于底層restfull的API接口來實作的,是以所有關于OSS的操作均可以通過API或者SDK來操作,資料遷移也不例外。通過API或者SDK中的PutObject、PostObject和MultipartUpload三個接口可以完成資料上傳操作以進行資料遷移。這三種接口主要适用于不同的應用場景:PutObject主要适用于使用者的伺服器端向OSS發送檔案,而該檔案不宜太大的這種普适的适用場景;PostObject則适用于通過html表單直接post檔案到OSS,不需要經過使用者的應用伺服器,這樣減少使用者應用伺服器的負載情況;MultipartUpload支援斷點上傳,适用于網絡品質較差或者檔案大小較大的情況下的上傳。通過上述的分析,可以知道本方法的優缺點,其中優點主要包括以下兩點:一、适用場景廣泛。使用者隻要可以擷取到源資料,即可在任何地點通過該方式遷移資料至OSS,不需要限制使用者源資料的來源、方式以及其檔案格式等。二、使用靈活。使用者可根據自己的需要自行編寫遷移邏輯,選擇是全量遷移、增量遷移或者舍去部分檔案格式不進行遷移等,許多複雜的遷移邏輯都可以由使用者通過代碼來實作。對應其優點也就有兩點主要的缺點:一、操作複雜。使用者需要自行實作遷移邏輯,包括周遊源資料、調用上傳接口等操作都需要使用者通過代碼來實作,需要使用者有一定的代碼基礎。二、速度較慢。如果使用者在調用API或者SDK的時候選擇EndPoint為OSS的公網域名的情況下,該上傳操作即需要通過公網來闡述。雖然OSS伺服器端并未限制上傳操作的帶寬,但是該操作可能會受到源端公網帶寬以及網絡鍊路的影響而導緻上傳速度較慢。

接下來我們将以JavaSDK的方式向大家示範如何通過API/SDK的PutObject和MultipartUpload兩個接口完成上傳操作。

首先,登入阿裡雲的官網,找到幫助文檔。

對象存儲OSS如何通過PutObject上傳檔案?

然後在幫助文檔中我們找到OSS,點選SDK示例,點選Java→安裝。

對象存儲OSS如何通過PutObject上傳檔案?

在安裝頁面中點選直接下載下傳,下載下傳完成後,我們将得到對應的SDK的壓縮包。

對象存儲OSS如何通過PutObject上傳檔案?

對其進行解壓,我們可以得到對應的檔案夾,點選進入檔案夾,我們可以得到整個SDK的檔案目錄,其中主要包含以下幾個部分:

對象存儲OSS如何通過PutObject上傳檔案?

doc主要包含SDK的說明文檔,包含其中的各個接口以及類的說明。

對象存儲OSS如何通過PutObject上傳檔案?

lib包含了SDK的依賴包,使用者在加入SDK的時候需要将對應的lib檔案夾下的所有jar包加入工程中才可以正常使用SDK。

對象存儲OSS如何通過PutObject上傳檔案?

Samples主要包含為使用者提供的一些示例代碼。根據其類别,我們對其進行了分類,然後使用者可以根據各名稱進行挑選。

對象存儲OSS如何通過PutObject上傳檔案?

sources主要包含了SDK的源代碼,使用者如果需要修改源代碼的話,可以根據本源代碼進行修改。

對象存儲OSS如何通過PutObject上傳檔案?

接下來我們将向大家介紹如何通過Java的SDK調用API的PutObject和MultipartUpload來完成資料的上傳操作。

首先,我們找到本地的eclipse開發環境,将其打開。在菜單欄中建立Java Project,定義Project名稱為OssTest_1,選擇Next。

對象存儲OSS如何通過PutObject上傳檔案?

在Libraries裡頭添加額外的jar包(這裡我們找到SDK中的lib檔案夾,将lib檔案夾中的所有jar包添加進來),點選Finish。這樣,我們一個簡單應用JavaSDK的項目就算建成了。我們可以在src裡頭添加對應的class來完成對應的操作。

對象存儲OSS如何通過PutObject上傳檔案?

這裡我們直接應用SDK中提供的示例代碼為大家進行講解。

首先我們将向大家介紹如何通過PutObject上傳檔案,其中PutObject主要的邏輯代碼如本代碼所示。

對象存儲OSS如何通過PutObject上傳檔案?

其中重要的幾個部分分别是ACCESS_ID、ACCESS_KEY,這兩個分别對應使用者帳号的AccessKeySecret和AccessKey。Endpoint指定的是對應的Bucket所屬的域名。使用者可以根據Bucket的地理資料中心來得到對應的Endpoint的值。

對象存儲OSS如何通過PutObject上傳檔案?

我們以杭州為例,Bucketname指定的是使用者設定的Bucket的名稱,使用者可以選擇自己在OSS控制台上建立的OSS Bucket的名稱。Key指的是對應的上傳的Object的Key值,這裡Key包含了Object相對的目錄以及它的檔案名,使用者可以在這個地方指定其相對目錄。比方說aliyuntest/photo1.jpg檔案。這裡我們根據ID、Key還有Endpoint我們可以new一個OSSCllent對象得到對應的Cllent對象。

接下來我們調用Cllent對象的PutObject接口來實作上傳操作。這裡主要有兩種方法:第一種是根據stream流來上傳。這裡我們首先去得到一個檔案,然後将檔案的内容捕獲成stream流,再通過PutObject上傳進入Cllent。這裡需要注意的是,我們在通過流上傳的時候需要指定它對應的ObjectMetadata,其中必須要指定的一個參數是ContentLength,該參數指定了檔案的大小,而ContentType主要是指定了檔案的類型。

對象存儲OSS如何通過PutObject上傳檔案?

第二種方法是直接通過檔案的形式進行上傳。如果是上傳使用者本地已有的檔案,建議使用第二種方法。這樣隻需要new一個file對象即可通過PutObject完成上傳。

使用PutObject有以下三點注意事項:

一、使用者在metaData中指定了Content-MD5請求頭的時候,OSS會在接收到完全的body以後計算body的Content-MD5并與使用者指定的MD5請求頭進行一緻性校驗。如果一緻性校驗通過,該檔案及上傳成功;如果校驗失敗,則會出現上傳失敗的操作。

二、如果在Head中使用者沒有加入Content length參數,則會傳回411 Length Required錯誤。如果在Head中使用者加入的Content length參數過小,則可能會導緻檔案隻上傳了前半部分的Content length長度,而後半部分的檔案則直接丢棄。如果使用者設定的Content length參數過大,可能會導緻OSS一直等待用戶端發起的包一直到Timeout,報逾時錯誤。

三、如果使用者在建立OSSCllent的時候指定的ID/KEY或者ENDPOINT有誤的時候可能會報403 AccessDenide的問題。

更多資訊參見:

對象存儲 OSS

>

SDK 示例 Java 簡單上傳

原文位址:

https://aliyunnew.com/a/How-does-Object-Storage-OSS-upload-files-via-PutObjectMultipartUpload.html