本章讲的是两种上传文件到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。