Сначала временный файл создается, затем пишется содержимое (да, надо именно через ФС а не память), затем отправляется
POST запросом.
Если делаю так, то получаю ошибку "QIODevice::read (QTemporaryFile, "/tmp/MyApplication.XM3751"): device not open":
QTemporaryFile* tempFile = new QTemporaryFile();
tempFile->open();
QZipWriter zip(tempFile);
...
zip.close();
...
QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart part;
part.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"data\""));
tempFile->open();
part.setBodyDevice(tempFile);
multiPart->append(part);
tempFile->setParent(multiPart);
QNetworkReply* reply = networkAccessManager.post(QNetworkRequest(QUrl("http://ya.ru")), multiPart);
multiPart->setParent(reply);
Если же добавлять файл не через part.setBodyDevice(tempFile), а использовать part.setBody(tempFile->readAll()), то все в порядке.