Задать вопрос
@tr1cks

Почему при отправке QTemporaryFile через POST/multipart из QNetworkAccessManager получаю ошибку «device not open»?

Сначала временный файл создается, затем пишется содержимое (да, надо именно через ФС а не память), затем отправляется
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()), то все в порядке.
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@tr1cks Автор вопроса
Проблема была в том, что QZipWriter при выходе из функции в своем деструкторе закрывал временный файл.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Zifix
@Zifix Куратор тега Qt
Barbatum
А если сделать проверку второй строки, собственно открытия, что оно отобразит?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы