2013-06-14 3 views
0

지난 며칠 동안 API v2를 사용하여 Box App에서 작업 중이며 OAuth2을 사용하여 성공적으로 인증되었습니다.새로운 OAuth2 API를 사용하여 코딩 된 QT 애플리케이션을 사용하는 중에 Box Server 파일 업로드 오류가 발생했습니다.

내 애플 토큰을 성공적으로 액세스를 검색하고 나는 또한 액세스 토큰을 사용하여 내 박스 계정에 액세스 할 수있어, 파일의 그러나 업로드는 299

의 응답으로 내가에서 볼 수있는 HTML 응답 실패 업로드 요청을 게시 한 후 상자에 다음 메시지가 표시됩니다. "죄송합니다. 해당 페이지에 액세스 할 수 없습니다." 상자 계정을 일시적으로 사용할 수 없습니다. 문제를 해결하기 위해 노력하고 있으며 곧 백업해야합니다. "

2xx 오류는 요청이 수락되었지만 Box 서버에서 처리 할 수 ​​없음을 의미합니다. 다음은 내 코드 스 니펫입니다. 파일을 게시하는 데 사용됩니다.

를 잘못 될 수 있는지에 대한 모든 팁이

을 감사합니다 나는 http://developers.box.com/get-started/#uploading-and-downloading

QUrl requrl = QUrl("https://www.box.com/api/2.0/files/content"); 

    std::string token = m_acc_token; 

    QString hdrval = "Bearer "+QString(token.c_str()); 

    QNetworkRequest qnr(requrl); 
    qnr.setRawHeader("Authorization",hdrval.toUtf8()); 

    QString boundary; 
    boundary = "---------7d935033608e2"; 

    QByteArray data;  
    data.append("[email protected]"); 
    data.append(boundary); 
    data.append("folder_id=0"); 
    data.append(boundary); 


    qnr.setHeader(QNetworkRequest::ContentTypeHeader,"multipart/form-data; boundary=---------7d935033608e2"); 
    qnr.setHeader(QNetworkRequest::ContentLengthHeader,data.size()); 

    QNetworkReply* areply = NULL; 
    areply = m_networkManager->post(qnr,data); 
+0

어떤 언어 당신이이 개발처럼 구현할 수있다? Java와 유사하지만 C 또는 C++ 원시 코드가 아닌 것인지 확실하지 않습니다. – Peter

+0

QT로 작성했습니다. 마찬가지로 나는 액세스 토큰을 수신하고 Box 계정에서 사용자의 콘텐츠에 액세스하는 데 성공했습니다. – pcodex

+0

QT는 단지 프레임 워크입니다. 나는 마이크로 소프트 컴파일러를 사용한다. – pcodex

답변

0

컬 통화에서 지침에 따라입니다 Box API 문서를 코드로 직접 변환 할 수 없습니다. 명령 행의 [email protected] 행은 파일 btest.text의 내용을 매개 변수 file의 값으로 지정합니다.

또한 여러 부분 경계가 잘못되었습니다. 끝이 \r\n이어야합니다. 하나는 다중 부분 본문의 시작 부분에 있어야하며 약간 다른 형식의 또 다른 경계가 최종 경계로 나타나야합니다. 멀티 파트 양식 데이터를 수동으로 구현하는 데 관심이 있으시면 RFC 1876을 읽어 보시기 바랍니다.

조작 된 멀티 파트 POST 본문이 전송되면 Box API는 500 응답을 반환합니다.

Qt 프레임 워크의 일부인 멀티 파트 양식 업로드의 경우 QHttpMultiPart을 사용하는 것이 좋습니다.

1

당신은

QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); 
QHttpPart headerPart; 
headerPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"parent_id\" \" ")); 
headerPart.setBody(QString(aParentFolderId).toLatin1()); 

QHttpPart textPartData; 
textPartData.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; filename=\"filename\" \" ")); 
textPartData.setBodyDevice(&File); //file must be open. 
File.setParent(multiPart); 
multiPart->append(headerPart); 
multiPart->append(textPartData); 
QNetworkRequest networkReq; 
networkReq.setUrl(QUrl("https://upload.box.com/api/2.0/files/content")); 
networkReq.setRawHeader("Authorization", "Bearer " + AccessToken.toLatin1()); 

networkReply = mNetworkAccessManager.post(networkReq, multiPart); 
multiPart->setParent(networkReply);