使用C++访问Azure blob存储

Access Azure blob storage using C++

本文关键字:blob 存储 Azure 访问 C++ 使用      更新时间:2023-10-16

我环顾四周,发现了一些建议我应该使用REST的答案。但是我该如何在Qt/c++中集成它呢?有人能把这方面的一些例子或几行代码联系起来吗?非常感谢!

我花了很多时间才实现。最棘手的是,你必须解码你的主键。在这个问题的帮助下,我决定使用OpenSSL,并编写了以下代码。

QString datastring = "GETnnnnnnnnnnnnx-ms-date:" + date + "nx-ms-version:2009-09-19n/myStorage/ncomp:list";
QByteArray ba = datastring.toUtf8();
unsigned char* signature = reinterpret_cast<unsigned char*>(ba.data());
QByteArray kba = QByteArray::fromBase64("theStorageAccountKey");
unsigned char* key = (unsigned char*) kba.data();
unsigned char result[EVP_MAX_MD_SIZE];
unsigned int result_len;
ENGINE_load_builtin_engines();
ENGINE_register_all_complete();
HMAC_CTX ctx;
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, key, strlen((const char*)key), EVP_sha256(), NULL);
HMAC_Update(&ctx, signature, strlen((const char*)signature));
HMAC_Final(&ctx, result, &result_len);
HMAC_CTX_cleanup(&ctx);
QByteArray array = QByteArray::fromRawData((char*)result, result_len);
array = array.toBase64();
qDebug() << "signature hash" << array;
QString version = "2009-09-19";
//requesting the list of container to Windows Azure
QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkRequest request;
request.setUrl(QUrl("http://myStorage.blob.core.windows.net/?comp=list"));
request.setRawHeader("Authorization","SharedKey myStorage:" + array);
request.setRawHeader("x-ms-date", date.toStdString().c_str());
request.setRawHeader("x-ms-version", version.toStdString().c_str());
QNetworkReply *reply = manager->get(request);
connect(reply, SIGNAL(readyRead()), this, SLOT(manageCloudReply()));

我希望它能帮助到别人。

请回答这个问题。它涵盖了您的要求,并概述了几个免费提供的C++库,您可以将这些库合并以访问Azure服务。