Я отправил Qt JSON строка> 1024 символов в PHP (проверено как, с помощью нескольких частей и URL-кодировки).
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"swiftjson\""));
textPart.setBody(QJsonDocument(model.toJson()).toJson(QJsonDocument::Compact));
multiPart->append(textPart);
На стороне PHP строка JSON почему-то усекается до 1024 символов
Я проверил:
QUrlQuery
вместо нескольких частей, та же ситуацияpost_max_size 20M
Ищете подсказку, как я могу отправить> 1024 символов
Вы, вероятно, должны использовать waitForBytesWritten
с какой-то петлей, или используйте связанный сигнал: bytesWritten
,
http://doc.qt.io/qt-5/qabstractsocket.html#waitForBytesWritten
http://doc.qt.io/qt-5/qiodevice.html#bytesWritten
Пример обратной петли показывает, как правильно отправить большую полезную нагрузку в ответе.
http://doc.qt.io/qt-5/qtnetwork-loopback-dialog-cpp.html
static const int PayloadSize = 64 * 1024; // 64 KB
static const int TotalBytes = 50 * 1024 * 1024;
connect(&tcpClient, SIGNAL(bytesWritten(qint64)),
this, SLOT(updateClientProgress(qint64)));
// called when the TCP client connected to the loopback server
bytesToWrite = TotalBytes - (int)tcpClient.write(QByteArray(PayloadSize, '@'));
…
void Dialog::updateClientProgress(qint64 numBytes)
{
// callen when the TCP client has written some bytes
// ...
// only write more if not finished and when the Qt write buffer is below a certain size.
if (bytesToWrite > 0 && tcpClient.bytesToWrite() <= 4*PayloadSize)
bytesToWrite -= (int)tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@'));
// ...
}
Надеюсь, это поможет.
Я понял это. Это на самом деле отладчик, усекающий переменные, или, точнее, отображение усекается. Фактическое значение остается нетронутым, но меня обманул дисплей. Установка значения 2048 для отладчика решает проблему.
На самом деле значение в скобках (на скриншоте выше) — это реальный размер, который я считал размером в байтах. Как только вы знаете …
Спасибо всем, кто помог.