我正在开发一个将图像上传到yfrog.com的简单应用程序。(这些图像将反映在Twitter帐户中)。这是我的代码。但它不起作用。我没有得到服务器的响应。
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request(QUrl("http://yfrog.com/api/uploadAndPost"));
QByteArray data;
QUrl params,params1;
QFile file("some image path");
QString boundary("-----abcde12345");
QString body = "\r\n--" + boundary + "\r\n";
params.addQueryItem("username",twitterusername);
params.addQueryItem("password",twitterpassword);
params.addQueryItem("message",some message...);
params.addQueryItem("key",mydeveloperkey);
data.append(body);
data.append(params.toString());
QByteArray ba;
ba=file.readAll();
QString body1(ba);
params1.addQueryItem("media",body1);
data.append(params1.toString());
data.append(body);
request.setRawHeader("Content-Type","multipart/form-data; boundary=-----abcde12345");
request.setHeader(QNetworkRequest::ContentLengthHe ader,data.size());
QNetworkReply *reply = manager->post(request,data);
reply->waitForReadyRead(-1);
qDebug() << "replay :"<<reply->readAll();
如果我检查了来自wireshark的请求的TCP数据包,它会发出错误消息,例如'畸形数据包'。
供参考:http://code.google.com/p/imageshacka...GuploadAndPost
请关于此的任何身体帮助。我做错了什么?
答案 0 :(得分:0)
QNetworkReply :: waitForReadyRead没有实现,因此它总是引用基类waitForReadyRead()(在本例中为QIODevice)。在基类中,您将看到waitForReadyRead始终返回FALSE。
从文档中,您必须在QNetworkReply中使用readRead()信号,并在调用插槽时读取数据。
QNetworkReply *reply = manager->get(request);
connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));