【问题标题】:How to upload video to Youtube with QNetworkAuth如何使用 QNetworkAuth 将视频上传到 Youtube
【发布时间】:2017-02-24 12:25:21
【问题描述】:

使用QOAuth2AuthorizationCodeFlow通过google的oauth2进行授权。授权成功,同时使用GET请求(例如,从youtube频道获取视频列表)。 但是虽然QNetworkAccessManager 为用户提供了一堆post 方法重载:

QNetworkReply * post(const QNetworkRequest &request, QIODevice *data)
QNetworkReply * post(const QNetworkRequest &request, const QByteArray &data)
QNetworkReply * post(const QNetworkRequest &request, QHttpMultiPart *multiPart)

QOAuth2AuthorizationCodeFlow 只有:

QNetworkReply *post(const QUrl &url, const QVariantMap &parameters = QVariantMap());

使用QHttpMultiPartQHttpPart::setBodyDevice() 可以轻松附加文件。但我不确定如何使用QVariantMap 进行视频/文件上传。

另外,尝试使用:QOAuth2AuthorizationCodeFlow::networkAccessManager() 来访问底层网络管理器,但它提供了带有GET 的 202 响应代码。并且,如果使用经过身份验证的 url,QOAuth2AuthorizationCodeFlow::createAuthenticatedUrl(),则响应代码为 200,但回复内容为空(readAll() 返回空缓冲区)。也不适用于POST

使用QT 2nd day,所以我可能会误解一些概念。感谢您提供任何帮助和想法。

【问题讨论】:

  • 很高兴有人提出这个问题。
  • 只是好奇您是否不介意为此提供完整的代码。我会反过来赠送一些声誉作为感谢。由于缺乏文档,我在这方面遇到了一些麻烦。
  • @Akiva 代码不是很漂亮,但它确实为我上传了一个视频github.com/x4t3a/YoutubeUploader/blob/master/…

标签: c++ qt google-oauth qnetworkrequest


【解决方案1】:

能够解决它。但是,也许有正确的解决方案。

QOAuth2AuthorizationCodeFlow youtube{};
...
// authorization
...
auto multi_part = new QHttpMultiPart{ QHttpMultiPart::MixedType };
auto video_part = new QHttpPart{};
auto video = new QFile{ video_path };

if (!video->open(QIODevice::ReadOnly)) { return nullptr; }

video_part->setHeader(QNetworkRequest::ContentTypeHeader, QVariant("video/*"));
video_part->setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("Slug"));
video_part->setBodyDevice(video);
multi_part->append(*video_part);

QNetworkRequest req{youtube_videos_insert};
const QString bearer_format = QStringLiteral("Bearer %1");
const QString bearer = bearer_format.arg(youtube.token());
req.setRawHeader("Authorization", bearer.toUtf8());

youtube.networkAccessManager()->post(req, multi_part);

【讨论】:

    猜你喜欢
    • 2013-05-30
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2016-01-27
    • 2013-09-19
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多