データを PHP スクリプトに送信し、新しくアップロードされたファイル名を PHP スクリプトからの http 応答として取得する画像アップロード ウィジェットを作成しています。
@jdi、これは 1 つの問題でしたが、qDebug() << rep->readAll() の応答として "? が返されるため、最初の readAll でバッファがクリアされます。
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
image->save(&buffer, "JPG");
QNetworkAccessManager *http=new QNetworkAccessManager(this);
QNetworkRequest r(QUrl("http://domain/test.php"));
QString bound="---------------------------723690991551375881941828858";
QByteArray data(QString("--"+bound+"\r\n").toAscii());
data += "Content-Disposition: form-data; name=\"action\"\r\n\r\n";
data += "\r\n";
data += QString("--" + bound + "\r\n").toAscii();
data += "Content-Disposition: form-data; name=\"file\"; filename=\"test.jpg\"\r\n";
data += "Content-Type: image/JPG\r\n\r\n";
data += bytes;
data += "\r\n";
data += QString("--" + bound + "\r\n").toAscii();
data += QString("--" + bound + "\r\n").toAscii();
data += "Content-Disposition: form-data; name=\"desc\"\r\n\r\n";
data += "Description for my image here :)\r\n";
data += "\r\n";
r.setRawHeader(QString("Accept-Encoding").toAscii(), QString("gzip,deflate").toAscii());
r.setRawHeader(QString("Content-Type").toAscii(),QString("multipart/form-data; boundary=" + bound).toAscii());
r.setRawHeader(QString("Content-Length").toAscii(), QString::number(data.length()).toAscii());
rep = http->post(r,data);
connect(http,SIGNAL(finished(QNetworkReply*)),this,SLOT(uploadFinished(QNetworkReply*)));
そしてコールバック関数:
void UploadWidget::uploadFinished(QNetworkReply* r)
{
r->deleteLater();
if(r->error() == QNetworkReply::NoError) {
QByteArray data = r->readAll();
//QString s = r->readAll(); solved - readAll clears the buffer :)
}
}
私は QByteArray b = rep->readAll(); で繰り返しました。for (int i = 0 ; i< b.size(); i++) { qDebug() << (char)b.at(i); 一部のシンボルしか取得できないため、bytearray 全体を Qstring に変換する方法はありますか
? 3 , É E , V c D ? ? Ô â C ö f § は「1this is a test1」である必要があります