OSS
概述
OSS也叫對象存儲服務(Object Storage Service),是阿里云提供的一種存儲服務,隨著智能設備越來越普及,越來越多終端的內(nèi)容需要存儲在云端,例如錄音留言,照片、視頻、文件日志等等。下面介紹幾個OSS中的概念,后面在開發(fā)的過程中會用到
存儲空間(Bucket)存儲空間是您用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個存儲空間。存儲空間具有各種配置屬性,包括地域、訪問權限、存儲類型等。您可以根據(jù)實際需求,創(chuàng)建不同類型的存儲空間來存儲不同的數(shù)據(jù)。
對象(Object)對象是OSS存儲數(shù)據(jù)的基本單元,也被稱為OSS的文件。對象由元信息(Object Meta)、用戶數(shù)據(jù)(Data)和文件名(Key)組成。對象由存儲空間內(nèi)部唯一的Key來標識。對象元信息是一組鍵值對,表示了對象的一些屬性,例如最后修改時間、大小等信息,同時您也可以在元信息中存儲一些自定義的信息。
訪問域名(Endpoint)Endpoint表示OSS對外服務的訪問域名。OSS以HTTP RESTful API的形式對外提供服務,當訪問不同地域的時候,需要不同的域名。通過內(nèi)網(wǎng)和外網(wǎng)訪問同一個地域所需要的域名也是不同的。
訪問密鑰(AccessKey)AccessKey簡稱AK,指的是訪問身份驗證中用到的AccessKey Id和AccessKey Secret。OSS通過使用AccessKey Id和AccessKey Secret對稱加密的方法來驗證某個請求的發(fā)送者身份。AccessKey Id用于標識用戶;AccessKey Secret是用戶用于加密簽名字符串和OSS用來驗證簽名字符串的密鑰,必須保密。
版權信息
Apache license v2.0
目錄結構
├── src
│ ├── auth/*.cc # 證書認證相關實現(xiàn)函數(shù)
│ ├── client/*.cc # 客戶端設備核心邏輯實現(xiàn)函數(shù)
│ ├── encryption/*.cc # 加密安全相關部分
│ ├── external
│ │ ├── json/*.cc # json相關的函數(shù)
│ │ └── tinyxml2/*.cc # tinyxml2網(wǎng)絡資源
│ ├── http/*.cc # http相關的網(wǎng)絡函數(shù)
│ ├── model/*.cc # OSS模型相關的網(wǎng)絡函數(shù)
│ ├── utils/*.cc # OSS組件資源通用部分
│ ├── resumable/*.cc # 相關恢復邏輯
│ └── *.cc # 其他部分
├── include/alibabacloud/oss
│ ├── auth/*.h # 證書認證相關頭文件
│ ├── client/*.h # 客戶端設備核心邏輯頭文件
│ ├── encryption/*.h # 加密安全相關頭文件
│ ├── http/*.h # http相關的函數(shù)頭文件
│ ├── model/*.h # OSS模型相關的網(wǎng)絡函數(shù)頭文件
│ ├── utils/*.h # OSS組件資源通用部分頭文件
│ └── *.h # 其他頭文件
├── package.yaml # 編譯配置文件
└── example
└── oss_example.c # OSS測試代碼
依賴組件
haas100
mbedtls
cplusplus
fatfs
常用配置
系統(tǒng)中相關配置已有默認值,如需修改配置,統(tǒng)一在package.yaml修改,具體如下:
選擇使用CRYPTO MBEDTLS加密方式
USE_CRYPTO_MBEDTLS: 1
選擇使用POSIX API的timer接口
USE_AOS_TIME_POSIX_API: 1
選擇支持讀取SD上傳文件,READ_SD_SIZE_MAX可以配置最大讀取的文件大小,默認15KB
USE_SD_FOR_OSS: 1
READ_SD_SIZE_MAX: 1024*15
API說明
在使用OSS組件之前,開發(fā)者需要從阿里云平臺購買OSS服務獲取,在oss_example.c中替換即可。
阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
請妥善保管好您的AccessKey信息。強烈建議不要將AccessKey ID和AccessKey Secret保存到工程代碼里或者任何容易被泄露的地方,AccessKey泄露會威脅您賬號下所有資源的安全。
// 填入阿里云平臺生成的 AccessKeyID 以及 AccessKeySecret
// getAccessKeyID()和getAccessKeySecret()方法的實現(xiàn),可以通過
// 從kv中讀取或者從文件中讀取都可以,不建議明文寫在代碼中
char AccessKey_ID[] = getAccessKeyID();
char AccessKey_Secret[] = getAccessKeySecret();
char Endpoint[] = "End point";
char Bucket[] = "Bucket";
OSS上傳本地文件的API接口
--------------------------------------------------
-- keyId --> 身份驗證AccessKey Id --
-- keySecret --> 身份驗證AccessKey Secret --
-- endPoint --> OSS對外服務的訪問域名 --
-- bucketName --> 存儲空間 --
-- localfilepath --> 本地文件路徑 --
--------------------------------------------------
char* oss_upload_local_file(char *keyId,
char *keySecret,
char *endPoint,
char *bucketName,
char* localfilepath);
OSS上傳本地字符內(nèi)容API接口
--------------------------------------------------
-- keyId --> 身份驗證AccessKey Id --
-- keySecret --> 身份驗證AccessKey Secret --
-- endPoint --> OSS對外服務的訪問域名 --
-- bucketName --> 存儲空間 --
-- scontent --> 本地字符內(nèi)容 --
--------------------------------------------------
char* oss_upload_local_content(char *keyId,
char *keySecret,
char *endPoint,
char *bucketName,
char *scontent);
使用示例
組件使用示例相關的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發(fā)工具,所以首先需要參考《AliOS Things集成開發(fā)環(huán)境使用說明之搭建開發(fā)環(huán)境》,下載安裝。待開發(fā)環(huán)境搭建完成后,可以按照以下步驟進行示例的測試。
步驟1 創(chuàng)建或打開工程
打開已有工程
如果用于測試的案例工程已存在,可參考《AliOS Things集成開發(fā)環(huán)境使用說明之打開工程》打開已有工程。
創(chuàng)建新的工程
組件的示例代碼可以通過編譯鏈接到AliOS Things的任意案例(solution)來運行,這里選擇helloworld_demo案例。helloworld_demo案例相關的源代碼下載可參考《AliOS Things集成開發(fā)環(huán)境使用說明之創(chuàng)建工程》。
步驟2 添加組件
案例下載完成后,需要在helloworld_demo組件的package.yaml中添加對組件的依賴:
depends:
- linksdk: dev_aos
- mbedtls: dev_aos
- netmgr: dev_aos
- oss: dev_aos
步驟3 下載組件
在已安裝了的開發(fā)環(huán)境工具欄中,選擇Terminal -> New Terminal啟動終端,并且默認工作路徑為當前工程的workspace,此時在終端命令行中輸入:
aos install oss
上述命令執(zhí)行成功后,組件源碼則被下載到了./components/oss路徑中。
步驟4 添加示例
OSS組件的package.yaml中添加example示例代碼:
source_file:
- example/oss_example.c
helloworld.c中添加網(wǎng)絡相關部分,因為OSS依賴網(wǎng)絡的連接
#include <stdio.h>
#include <stdlib.h>
#include <aos/errno.h>
#include <aos/kernel.h>
#include "aos/init.h"
#include "board.h"
#include <k_api.h>
//添加網(wǎng)絡
#include "netmgr.h"
#include <uservice/uservice.h>
#include <uservice/eventid.h>
int application_start(int argc, char *argv[])
{
int count = 0;
printf("nano entry here!\r\n");
aos_set_log_level(AOS_LL_DEBUG);
event_service_init(NULL);
netmgr_service_init(NULL); //添加網(wǎng)絡
while(1) {
aos_msleep(1000);
};
}
步驟5 編譯固件
在示例代碼已經(jīng)添加至組件的配置文件,并且helloworld_demo已添加了對該組件的依賴后,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之編譯固件》。
步驟6 燒錄固件
helloworld_demo案例的固件生成后,可參考《AliOS Things集成開發(fā)環(huán)境使用說明之燒錄固件》來燒錄固件。
步驟7 打開串口
固件燒錄完成后,可以通過串口查看示例的運行結果,打開串口的具體方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之查看日志》。
當串口終端打開成功后,可在串口中輸入help來查看已添加的測試命令。
步驟8 測試示例
CLI命令行輸入:網(wǎng)絡連接:
netmgr -t wifi -c SSID PWD
CLI關鍵日志:
[ 41.977]<I>WIFI_SERVICE set sntp server:1.cn.pool.ntp.org successfully
[ 41.977]<I>WIFI_SERVICE sntp config servadd end.
[ 42.231]<I>WIFI_SERVICE [sntp] OK: sec 1616747078 usec 875314
CLI命令行輸入:測試OSS上傳本地字符內(nèi)容
oss_test 0 hello_oss # 上傳本地內(nèi)容,例如hello_oss到oss系統(tǒng)中
CLI關鍵日志:
oss upload begin 0...
objectfile_path:oss/test/oss.txt
----- time 1616747084 ---------
read
ProgressCallback[0] => 9 ,9,9
read
ProgressCallback[0] => 0 ,9,9
[makeRequest]response_code: 200
oss ->url:http://xxxxxxxxxx.xxxxxx
oss_upload_local_content success, ETag:ED9BE43B38DDC1254170BEBCA4046368
oss upload end !!!
CLI命令行輸入:測試OSS上傳本地文件
oss_test 1 /sdcard/oss.txt # 上傳本地文件,例如SD卡讀取oss.txt上傳
CLI關鍵日志:
oss upload begin 1...
objectfile_path:sdcard/oss.txt
localfile_path:/sdcard/oss.txt
[ 106.852]<A>AOS open file /sdcard/oss.txt
[ 106.854]<A>AOS SD open file size <51>.
----- time 1616747022 ---------
oss ->url:http://xxxxxxxxxx.xxxxxxxxxx
oss_upload_local_file success, ETag:22065065146EAA25CFB9FF5E774DD1C9
oss upload end !!!
FAQ
Q1: OSS本組件依賴網(wǎng)絡嗎?
答:是的,OSS組件只有在網(wǎng)絡正常的時候才可以使用。