Skip to content

Instantly share code, notes, and snippets.

@ialhashim
Created December 17, 2013 08:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ialhashim/8001562 to your computer and use it in GitHub Desktop.
Save ialhashim/8001562 to your computer and use it in GitHub Desktop.
Box.com upload API using Qt
#pragma once
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QHttpMultiPart>
#include <QHttpPart>
#include <QFile>
namespace BoxCloud
{
bool uploadFile( QString filename, QString accessToken, QString folderID = "871822902" )
{
QFile *fileUpload = new QFile(filename);
fileUpload->open(QIODevice::ReadOnly);
QHttpMultiPart * multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QByteArray boundary("56354654654654321768987465413574634354658");
multiPart->setBoundary(boundary);
QHttpPart folderPart;
folderPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"folder_id\""));
folderPart.setBody("871822902"); // folder at Box
QString fileExt = filename.split(".").takeLast();
QString mimeType = "application/unknown";
QString fileName = filename.split("/").takeLast();
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentTypeHeader, mimeType);
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; filename=\""+ fileName +"\"; name=\"filename\";"));
textPart.setBodyDevice(fileUpload);
multiPart->append(textPart);
multiPart->append(folderPart);
QNetworkRequest req;
req.setUrl(QUrl("https://upload.box.com/api/2.0/files/content"));
QByteArray ba_auth = QString("Bearer " + accessToken).toUtf8();
req.setRawHeader("Authorization", ba_auth);
QNetworkAccessManager * m_netmanager = new QNetworkAccessManager;
QNetworkReply * reply = m_netmanager->post(req, multiPart);
QEventLoop loop;
QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit()));
loop.exec();
// Lets print the HTTP GET response.
qDebug( reply->readAll() );
return true;
}
}
@stepanenkoalvl
Copy link

stepanenkoalvl commented Oct 27, 2017

This solution still works. But what aboute new API with such request
curl https://upload.box.com/api/2.0/files/content \
-H "Authorization: Bearer ACCESS_TOKEN" -X POST
-F attributes='{"name":"tigers.jpeg", "parent":{"id":"11446498"}}'
-F file=@myfile.jpg
I've spend so much time trying to find solution but it was useless...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment