Qt获取AmazonS3文件的内容长度

Qt获取AmazonS3文件的内容长度,qt,amazon-web-services,amazon-s3,http-headers,http-content-length,Qt,Amazon Web Services,Amazon S3,Http Headers,Http Content Length,我想在我的Qt应用程序中获取托管在Amazon S3上的文件的大小 下面的代码适用于非S3文件,但对于签名的S3链接,它会打印出QVariantInvalid 似乎内容长度不在S3HTTP头中。。。那么如何获得文件大小呢 void MainWindow::requestFileSize(QString url) { QNetworkRequest req; m_netmanager = new QNetworkAccessManager(this); QUrl stric

我想在我的Qt应用程序中获取托管在Amazon S3上的文件的大小

下面的代码适用于非S3文件,但对于签名的S3链接,它会打印出QVariantInvalid

似乎内容长度不在S3HTTP头中。。。那么如何获得文件大小呢

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);
}

我已经想出了解决这个问题的办法

看起来AmazonS3不会让您在head请求上看到整个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();
}

为了将来的参考,请发布一个我们可以构建和运行的自包含代码。@您可以发布链接,以便验证内容长度标题是否确实存在于响应标题中。将我发布的代码放入一个新项目并构建它很容易,您只需要标题定义并包含依赖项,而不需要我用与问题无关的代码将文章弄乱。希望没问题。。。不管怎样,看看下面的解决方案,就知道了。