本章講的是兩種上傳文件到oss的方式
我使用的是vs2017 IDE
安裝C++SDK的過程:
安裝 CMake。打開 cmd 進入 SDK 文件目錄,創建 build 文件夾,運行cmake …生成所需文件,如果要構建 x64 體系結構,可以使用命令 cmake -A x64 …來實現。再用 Visual Studio 打開 alibabacloud-oss-cpp-sdk.sln 生成解決方案。生成lib和dll文件即可。
依賴庫分debug和release版本。
需要分別編譯。
導庫:
包含目錄
庫目錄:
庫名:
#include <iostream>
#include <alibabacloud/oss/OssClient.h> //oss庫
using namespace std;
using namespace AlibabaCloud::OSS;
void uploadoss(String &str)
{
/* 初始化OSS賬號信息 */
std::string AccessKeyId = "*****";
std::string AccessKeySecret = "****";
std::string Endpoint = "oss-cn-beijing.aliyuncs.com"; //圖片訪問地址域名地址
std::string BucketName = "yourBucketName"; //你的bucket名字
std::string ObjectName = "images/" + str; //oss文件+文件名
/* 初始化網絡等資源 */
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* 上傳文件 */
auto outcome = client.PutObject(BucketName, ObjectName, "../1.jpg");//本地文件地址
if (!outcome.isSuccess()) {
/* 異常處理 */
std::cout << "CreateBucket fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return;
}else
{
cout<<"send successful!"<<endl;
}
/* 釋放網絡等資源 */
ShutdownSdk();
return;
}
//內存上傳
void uploadoss(String &picname, stringstream &picstream)
{
/* 初始化OSS賬號信息 */
std::string AccessKeyId = "****";
std::string AccessKeySecret = "***";
std::string Endpoint = "oss-cn-beijing.aliyuncs.com"; //圖片訪問地址域名地址
std::string BucketName = "yourBucketName"; //
std::string ObjectName = "images/" + picname;
/* 初始化網絡等資源 */
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
*content << picstream.str();
PutObjectRequest request(BucketName, ObjectName, content);
/*(可選)請參見如下示例設置存儲類型及訪問權限ACL* /
//request.MetaData().addHeader("x-oss-object-acl", "private");
//request.MetaData().addHeader("x-oss-storage-class", "Standard");
/* 上傳文件 */
auto outcome = client.PutObject(request);
if (!outcome.isSuccess()) {
/* 異常處理 */
std::cout << "CreateBucket fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return;
}else
{
cout << "send successful! " << endl;
}
/* 釋放網絡等資源 */
ShutdownSdk();
return;
}
int main()
{
//本地上傳
String picname = "filename.jpg";
uploadoss(picname);
//內存上傳
stringstream liu;
for(int i=0;i<10;i++)
{
liu<<i;
}
//至此,信息已經在這個sstream流裏;
String picname2 = "1.txt";
uploadoss(picname2,liu);
return 0;
}
至此。成功上傳oss
在運行文件目錄下添加下面兩個dll,否則會彈出缺少dll
如:Debug目錄下
下面再給一個QT使用oss的配置教程:
注意要版本一致。和vs使用類似,我就不多說了。
我就只講配置使用的部分:
需要添加4個lib和3個文件使用路徑:
下面給一個pro:
#-------------------------------------------------
#
# Project created by QtCreator 2020-02-29T19:20:51
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = uposs
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
//oss的導入目錄
INCLUDEPATH += F:\vscode\osssdk\aliyun-oss-cpp-sdk-master\sdk\include \
F:\vscode\osssdk\aliyun-oss-cpp-sdk-master\sdk\src \
F:\vscode\osssdk\aliyun-oss-cpp-sdk-master\third_party\include
//下面是4個lib的導入信息。要在項目名右鍵添加外部庫的方式添加。
win32:CONFIG(release, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -llibcurl
else:win32:CONFIG(debug, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -llibcurld
else:unix: LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -llibcurl
INCLUDEPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64
DEPENDPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64
win32:CONFIG(release, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -llibeay32
else:win32:CONFIG(debug, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -llibeay32d
else:unix: LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -llibeay32
INCLUDEPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64
DEPENDPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64
win32:CONFIG(release, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -lssleay32
else:win32:CONFIG(debug, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -lssleay32d
else:unix: LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64/ -lssleay32
INCLUDEPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64
DEPENDPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/third_party/lib/x64
win32:CONFIG(release, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/ossbuild/lib/release/ -lalibabacloud-oss-cpp-sdk
else:win32:CONFIG(debug, debug|release): LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/ossbuild/lib/debug/ -lalibabacloud-oss-cpp-sdk
else:unix: LIBS += -LF:/vscode/osssdk/aliyun-oss-cpp-sdk-master/ossbuild/lib/ -lalibabacloud-oss-cpp-sdk
INCLUDEPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/ossbuild/lib/Release
DEPENDPATH += F:/vscode/osssdk/aliyun-oss-cpp-sdk-master/ossbuild/lib/Release
我使用的例子是x64+release編譯的。你們應用的時候需要生成所對應的阿里雲oss-lib。