사람이 나를 QT/C++이미지 업로드 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 HTTP 요청 '3Dk7laN3XW + ASbQj0XddfmSnnuYfVSkhg/oRfSJekKY ='에서 발견 된 MAC 서명이 계산 된 서명과 동일하지 않습니다. 문자열을 다음 사용하는 서버에 서명하기 : 'POST를
87,163
응용 프로그램/octet-stream을
X-MS-방울 형 : BlockBlob에게 X-MS-날짜 : 2014년 3월 19일 (수) 11 : 52:05 GMT x-ms-version : 2013-08-15 /logboxstorage/mycontainer/todate '입니다.
모든 도움을 주실 수 있습니다. 감사합니다!
도움 주셔서 감사합니다. 하지만 결과는 여전히 동일합니다 –
내 대답이 업데이트되었습니다. –
datetime은 현재 다른 형식의 코드에서 컨테이너 목록을 가져 왔기 때문에이 형식의 현재 날짜 인 경우 유효합니다 (Wed, 19 Mar 2014 13:58:20 GMT). 문제는 요청으로 이미지를 업로드하는 방법을 알지 못합니다. 도움에 감사드립니다. –