Russian Qt Forum

Qt => Работа с сетью => Тема начата: carhun от Июнь 09, 2013, 09:15



Название: Получить размер файла по ссылке
Отправлено: carhun от Июнь 09, 2013, 09:15
Доброго времени суток.

Подскажите пожалуйста могу ли я получить только размер файла без его скачивания? Пробовал делать вот так, но в этом случаи я так понимаю, что оно его сразу и скачивает, а мне это надо делать позже:

(Код написан просто для теста, так что не ругайте)
Код:
QString sUrl("https://github.com/zer0fl4g/Nanomite/blob/master/Build/x64/Release/QtCore4.dll?raw=true");
   QUrl url(sUrl);
   request.setUrl(QUrl(url));

   QNetworkAccessManager* pManager= new QNetworkAccessManager(this);
   reply = pManager->get(request);
   reply->deleteLater();
   connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
   loop.exec();

   QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
   if (reply->error()) {
       qDebug() << reply->errorString();
   }
   if (!redirectionTarget.isNull()) {
       qDebug() << "redirect to: " << redirectionTarget.toUrl();
       reply = pManager->get(QNetworkRequest(redirectionTarget.toUrl()));
       reply->deleteLater();
       connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
       loop.exec();

       redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

       if (!redirectionTarget.isNull()) {
           qDebug() << "redirect to: " << redirectionTarget.toUrl();
           reply = pManager->get(QNetworkRequest(redirectionTarget.toUrl()));
           reply->deleteLater();
           connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
           loop.exec();

           redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
           if (!redirectionTarget.isNull()) {
               qDebug() << "redirect to: " << redirectionTarget.toUrl();
           }
       }
   }

   qDebug() << reply->header(QNetworkRequest::ContentLengthHeader).toUInt();

   file.setFileName(QFileInfo(url.path()).fileName());
   if (file.open(QIODevice::WriteOnly) == false) {
       qDebug() << "file not open";
   }
   file.write(reply->readAll());


Название: Re: Получить размер файла по ссылке
Отправлено: mutineer от Июнь 09, 2013, 09:53
По идее если сделать head-запрос вместо get, то получишь http-заголовок, в котором может быть размер


Название: Re: Получить размер файла по ссылке
Отправлено: carhun от Июнь 09, 2013, 16:35
По идее если сделать head-запрос вместо get, то получишь http-заголовок, в котором может быть размер

Спасибо, да так заработало.