2013-01-16 43 views
1

我已经尝试了图片上传下面的代码,这个代码我能够从服务器获取,但其图像尺寸的反应是server.Can人始终为零帮我这方面,如何将图片上传到黑莓10级联服务器?

void App::uploadImage(){ 
QString path(QDir::currentPath() + "/app/native/assets/Icon/img.jpg"); 
QNetworkRequest request(
QUrl("http://domain.com?type=uploadimages&deviceid=12323")); 
QByteArray boundary = "-------------------------32142544626177"; 
QFile file(path); 
if (!file.open(QIODevice::ReadOnly)) { 
qDebug() << "error read image"; 
return; 
} 
QByteArray fileContent(file.readAll()); 

QByteArray data = "--" + boundary + "\r\n"; 
data += 
"Content-Disposition: form-data; name=\"data\"; filename=\"img.jpg\";\r\n"; 
data += "Content-Type: image/jpg\r\n\r\n" + fileContent + "\r\n"; 
data += "--" + boundary + "--\r\n"; 
    request.setRawHeader("Content-Type", 
"multipart/form-data; boundary=" + boundary); 
request.setRawHeader("Content-Length", 
QString::number(data.size()).toAscii()); 
file.close(); 
qDebug() << "data" << data.size(); 
QNetworkAccessManager *am = new QNetworkAccessManager(this); 
QNetworkReply *reply = am->post(request, "&data=" +data); 

QObject::connect(am, SIGNAL(finished(QNetworkReply*)), this, 
SLOT(replyFinished(QNetworkReply*))); 
} 
void App::replyFinished(QNetworkReply* reply) { 
    reply->open(QIODevice::ReadOnly); 
    if (reply->error() == QNetworkReply::NoError) { 
     QByteArray str = (reply->readAll()); 
     QString response = QString::fromUtf8(str.data(), str.size()); 
     qDebug() << " response " << response; 
    } 
    else{ 
     qDebug() << "error response server"; 
    } 
} 
+0

你好,你找到解决办法吗? – Amarnath

回答

1
QString body = "" ; 

const QUrl url("http://someurl.to/make/the/post"); 
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); 
QHttpPart textPartData; 
body = "" ; 
QTextStream(&body) << ""; 
textPartData.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=utf-8"); 
textPartData.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"data\"")); 
textPartData.setBody(body.toAscii()); 

    for(int i=0; i< number_of_files_to_send ; i++){ 
      QHttpPart imagePart; 
      QString header_body = ""; 
      QTextStream(&header_body) << "form-data; name=\"" << name_of_the_file << "\"; filename=\"" << name_of_the_file << ".jpg\"" ; 
      imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(header_body)); 
      imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg")); 

      //prepare file for upload 
      QString filepath; 
      QTextStream(&filepath) << FunkyPigeonBlackberry::getInstance()->dataModelProductDetails()->custom_image(i).value("cut_image").toString(); 

      // pack the new file 
      QFile *file = new QFile(filepath); 
      file->open(QIODevice::ReadOnly); 
      imagePart.setBodyDevice(file); 
      file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart 
      multiPart->append(imagePart); 
    } 

multiPart->append(textPartData); 
multiPart->append(textPartProductDetails); 
multiPart->append(textPartDataDelivery); 


QNetworkRequest request(url); 

QNetworkReply* reply = m_networkAccessManager->post(request, multiPart); 
connect(reply, SIGNAL(finished()), this, SLOT(onNetworkResponse()));