Загрузите изображение в хранилище Azure, используя Qt / Stack Overflow

Может кто-нибудь помочь мне загрузить изображение в хранилище Azure, используя qt / c ++

    QByteArray data;
QFile file("Bg.jpg");
if (file.open(QIODevice::ReadOnly))
{
data.append(file.readAll());   //let's read the file
}
QString date = QDateTime::currentDateTime().toString("ddd, d MMM yyyy HH:mm:ss") + " GMT";
QString header = QString("PUT\n\n\n%1\n\n\n\n\n\n\n\n\nx-ms-blob-type:BlockBlob\nx-ms-date:%2\nx-ms-version:2013-08-15\n/mycontainer/todate/").arg(data.length()).arg(date);

QString urlUri = "http://myaccount.blob.core.windows.net/mycontainer/todate";
QByteArray ba = header.toUtf8();

unsigned char* signature = reinterpret_cast<unsigned char*>(ba.data());
QByteArray kba =

QByteArray::fromBase64("key");
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();

String version = "2013-08-15";

QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkRequest request;
request.setUrl(QUrl(urlUri));

request.setRawHeader("Content-  Length",QString::number(data.length()).toStdString().c_str());
request.setRawHeader("Content-Type","application/octet-stream");
request.setRawHeader("x-ms-blob-type","BlockBlob");
request.setRawHeader("x-ms-date", date.toStdString().c_str());
request.setRawHeader("x-ms-version", version.toStdString().c_str());
request.setRawHeader("Authorization","SharedKey myaccount:"+array);manager->post(request,data);
connect(manager, SIGNAL(finished(QNetworkReply*)), this,SLOT(manageCloudReply(QNetworkReply*)));

и это ответ на запрос

я»AuthenticationFailed Серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.
RequestID: 82eb03cb-adf1-4797-bbc0-86c3e5ca3ec6
Время: 2014-03-19T03: 52: 35.4790761ZПодпись MAC, найденная в HTTP-запросе ‘3Dk7laN3XW + ASbQj0XddfmSnnuYfVSkhg / oRfSJekKY =’, отличается от любой вычисленной подписи. Сервер использовал следующую строку для подписи: ‘POST

87163

Применение / октет-поток

X-MS-блоб-тип: BlockBlob
x-ms-date: ср, 19 марта 2014 11:52:05 GMT
X-MS-версия: 2013-08-15
/ Logboxstorage / MyContainer / ФОРУМ.

любая помощь будет оценена .. спасибо !!!!

-1

Решение

Глядя на следующую строку кода:

QString header = QString("PUT\n\n\n%1\n\n\n\n\n\n\n\n\nx-ms-blob-type:BlockBlob\nx-ms-date:%2\nx-ms-version:2013-08-15\n/mycontainer/todate/").arg(data.length()).arg(date);

Я вижу лишний слеш (/) в mycontainer/todate/, Можете ли вы попробовать удалить это?

Также посмотрите на следующий код:

QString date = QDateTime::currentDateTime().toString("ddd, d MMM yyyy HH:mm:ss") + " GMT";

currentDateTime() вернет местную дату / время в зависимости от вашего компьютера. Так должно быть UTC/GMT дата / время. Попробуйте использовать currentDateTimeUtc().

Еще одна вещь, которую я заметил, что ваш запрос идет как POST на сервер. Это должно быть PUT запрос.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]