0

在过去的几天里,我一直在使用 API v2 开发 Box App,并使用OAuth2.

我的应用程序成功检索了访问令牌,并且我还可以使用访问令牌访问我的 Box 帐户,但是文件上传失败,响应为 299。

发布上传请求后,我从 Box 看到的 html 响应包含以下消息“抱歉,我们无法访问该页面。” 您的 Box 帐户可能暂时不可用。我们正在努力解决这个问题,应该很快就会恢复。”

我认为所有 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("file=@btest.txt");
    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);
4

2 回答 2

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);
于 2014-03-27T12:05:32.990 回答
0

Box API 文档中的 curl 调用无法像您所做的那样直接转换为代码。file=@btest.txt命令行上的行将文件的内容作为btest.text参数的值file

此外,您的多部分边界格式不正确:它们必须以\r\n;结尾 一个必须出现在多部分主体的开头,并且另一个格式略有不同的边界必须作为最终边界出现。如果您对手动实现多部分表单数据感兴趣,我建议您阅读RFC 1876

如果发送格式错误的多部分 POST 正文,Box API 将返回 500 响应。

我建议使用QHttpMultiPart进行多部分表单上传,这是 Qt 框架的一部分。

于 2013-07-03T04:18:53.440 回答