2017-02-24 1 views
1

QOAuth2AuthorizationCodeFlow을 사용하여 google의 oauth2로 인증하십시오. 승인은 물론 GET 요청 (예 : YouTube 채널에서 동영상 목록 가져 오기)을 사용하여 성공적으로 완료됩니다. QNetworkAccessManagerpost 방법 과부하의 무리와 함께 사용자를 제공한다 는하지만 :QNetworkAuth를 사용하여 Youtube에 비디오를 업로드하는 방법

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

QHttpMultiPart & QHttpPart::setBodyDevice()을 사용하여 파일을 추가하는 것은 쉽다. 그러나 비디오/파일 업로드에 QVariantMap을 사용하는 방법을 잘 모르겠습니다.

또한 QOAuth2AuthorizationCodeFlow::networkAccessManager()을 사용하여 기본 네트워크 관리자에 액세스하려고 시도했지만 GET과 202 응답 코드를 제공합니다. 그리고 인증 된 URL 인 QOAuth2AuthorizationCodeFlow::createAuthenticatedUrl()을 사용하는 경우 응답 코드는 200이지만 응답 내용은 비어 있습니다 (readAll()은 빈 버퍼를 반환 함). POST에서도 작동하지 않습니다.

QT 2 일 사용하기 때문에 몇 가지 개념을 오해 할 수 있습니다. 어떤 도움을 주셔서 감사합니다 & 아이디어.

+0

누군가이 질문에 만족했습니다. – Akiva

+0

당신이 마음에 드는 전체 코드를 만들지는 모르겠다. 나는 차례 차례로 감사로서의 명성을 선물 할 것이다. 나는 문서의 부족 때문에 이것에 대해 약간의 문제가있다. – Akiva

+1

@Akiva 코드가 그다지 훌륭하지 않지만 나에게 동영상을 업로드했습니다. https://github.com/x4t3a/YoutubeUploader/blob/master/youtube_wrapper.cpp#L98 –

답변

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); 
관련 문제