1

Я хочу получить размер файла файла, размещенного на Amazon S3, в моем приложении Qt.Qt get Content Длина файла Amazon S3

ниже код работает отлично подходит для не-S3 файлов, но для знакового S3 связывает он печатает QVariant(Invalid)

кажется, что Content-Length не в заголовке HTTP S3 ... так как я получаю размер файла?

void MainWindow::requestFileSize(QString url) 
{ 
    QNetworkRequest req; 
    m_netmanager = new QNetworkAccessManager(this); 
    QUrl strict_url = QUrl::fromEncoded(url.toStdString().c_str(),QUrl::StrictMode); 
    req.setUrl(strict_url); 
    m_reply = m_netmanager->head(req); 
    connect(m_reply, SIGNAL(metaDataChanged()), this, SLOT(fileSize())); 
} 

void MainWindow::fileSize() 
{ 
    qDebug() << "Content Length: " << m_reply->header(QNetworkRequest::ContentLengthHeader); 
} 
+0

Для дальнейшего использования, пожалуйста, напишите самодостаточный код, который мы можем построить и запустить. – lpapp

+0

@stukennedy вы можете опубликовать ссылку, чтобы можно было проверить, присутствует ли заголовок длины содержимого в заголовке ответа или нет. –

+0

достаточно легко поместить код, который я отправил в новый проект, и построить его (вам просто нужны определения заголовков и включить зависимости), без того, чтобы я помешал сообщению с кодом, который не связан с вопросом. Надеюсь, что все в порядке ... Во всяком случае, см. Ниже решение, просто понял это. – stukennedy

ответ

0

Я выяснил, как обойти это.

Похоже, что Amazon S3 не позволит вам увидеть весь HTTP-заголовок по запросу главы ... но вы можете сделать GET, получить заголовок, а затем удалить ответ, не получая ни одного из тела.

Это работает:

void MainWindow::requestFileSize(const QString &url) 
{ 
    QNetworkRequest req; 
    m_netmanager = new QNetworkAccessManager(this); 
    req.setUrl(QUrl(url)); 
    m_reply = m_netmanager->get(req); 
    connect(m_reply, SIGNAL(metaDataChanged()), this, SLOT(fileSize())); 
} 

void MainWindow::fileSize() 
{ 
    qDebug() << "Content Length: " << m_reply->header(QNetworkRequest::ContentLengthHeader); 
    m_reply->deleteLater(); 
    m_netmanager->deleteLater(); 
} 
Смежные вопросы