Qt 如何将文件上载到box?我有卷曲代码
我正在我的应用程序中集成box cloud。我正在使用Qt平台 在盒式文档中,他们说这样的帖子是卷曲的Qt 如何将文件上载到box?我有卷曲代码,qt,curl,box-api,qtnetwork,Qt,Curl,Box Api,Qtnetwork,我正在我的应用程序中集成box cloud。我正在使用Qt平台 在盒式文档中,他们说这样的帖子是卷曲的 curl https://upload.box.com/api/2.0/files/content \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -F filename=@FILE_NAME \ -F folder_id=FOLDER_ID 指定文件名和文件夹id参数的位置。我试着在正文中发帖,但它给出了错误。还有,请告诉我在哪里张贴文件
curl https://upload.box.com/api/2.0/files/content \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F filename=@FILE_NAME \
-F folder_id=FOLDER_ID
指定文件名和文件夹id参数的位置。我试着在正文中发帖,但它给出了错误。还有,请告诉我在哪里张贴文件内容
谢谢。编辑:看起来你在我发布答案后就删除了你的PHP标签。这可能与您的问题无关。 box文档似乎在告诉您如何从linux命令行执行curl传输。我们只需要将其转换为PHP 在PHP中,首先需要以适当的方式获取文件的路径:
$filePath = realpath('./file_name');
将您的访问令牌存储在变量中,以供以后使用:
$accessToken = "YOUR_ACCESS_TOKEN";
然后需要设置卷曲控制柄:
$ch = curl_init();
将POST数据放入数组中。这相当于-F参数中的内容:
$post = array('filename'=>'@'.$filePath, 'folder_id'=>'my_fave_folder');
然后需要设置特定的卷曲选项:
curl_setopt($ch, CURLOPT_URL, "https://upload.box.com/api/2.0/files/content");
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $accessToken"));
然后执行curl并在$result
中捕获响应,您可以回送该响应并检查:
$result=curl_exec($ch);
curl_close($ch);
echo $result;
您可能也必须这样做,因为您是通过https访问的。编辑:看起来您在我发布答案后立即删除了PHP标记。这可能与您的问题无关。
box文档似乎在告诉您如何从linux命令行执行curl传输。我们只需要将其转换为PHP
在PHP中,首先需要以适当的方式获取文件的路径:
$filePath = realpath('./file_name');
将您的访问令牌存储在变量中,以供以后使用:
$accessToken = "YOUR_ACCESS_TOKEN";
然后需要设置卷曲控制柄:
$ch = curl_init();
将POST数据放入数组中。这相当于-F参数中的内容:
$post = array('filename'=>'@'.$filePath, 'folder_id'=>'my_fave_folder');
然后需要设置特定的卷曲选项:
curl_setopt($ch, CURLOPT_URL, "https://upload.box.com/api/2.0/files/content");
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $accessToken"));
然后执行curl并在$result
中捕获响应,您可以回送该响应并检查:
$result=curl_exec($ch);
curl_close($ch);
echo $result;
您可能也必须这样做,因为您是通过https访问的。编辑:如果使用PHP。对于QT,请检查其他有关如何通过C++发送libcurl请求的StackOverflow问题。
您还可以将此标题用于一般用途:
$defaultOptions = array(
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_VERBOSE => true,
CURLOPT_HEADER => false,
CURLINFO_HEADER_OUT => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
);
您可以通过curl_setopt_array()函数进行设置:
curl_setopt_array($curlhandle, $defaultOptions);
编辑:如果使用PHP。对于QT,请检查其他有关如何通过C++发送libcurl请求的StackOverflow问题。
您还可以将此标题用于一般用途:
$defaultOptions = array(
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_VERBOSE => true,
CURLOPT_HEADER => false,
CURLINFO_HEADER_OUT => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
);
您可以通过curl_setopt_array()函数进行设置:
curl_setopt_array($curlhandle, $defaultOptions);
我尝试使用qtapi发布多部分/表单数据。我不熟悉在Qt中使用libcurl。但我只在qtapi上获得了成功。这是我的密码
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(folderId.toUtf8());
QString fileExt = fileToUpload.split(".").takeLast();
QString mimeType = FileUtilities::getMIMEType("." + fileExt);
QString fileName = fileToUpload.split("/").takeLast();
qDebug() << "file name to upload : " << fileName;
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentTypeHeader, mimeType);
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; filename=\""+ fileName +"\"; name=\"filename\";"));
QFile *fileUpload = new QFile(fileToUpload);
fileUpload->open(QIODevice::ReadOnly);
textPart.setBodyDevice(fileUpload);
multiPart->append(textPart);
multiPart->append(folderPart);
req.setUrl(QUrl("https://upload.box.com/api/2.0/files/content"));
QByteArray ba_auth = QString("Bearer " + m_accessToken).toUtf8();
req.setRawHeader("Authorization", ba_auth);
m_netManager->post(req, multiPart);
multiPart=新的QHttpMultiPart(QHttpMultiPart::FormDataType);
QByteArray边界(“56354654654654321768987465413574634354658”);
多部分->设置边界(边界);
QHttpPart folderPart;
setHeader(QNetworkRequest::ContentDispositionHeader,QVariant(“表单数据;名称=\“文件夹id\”));
folderPart.setBody(folderId.toUtf8());
QString fileExt=fileToUpload.split(“.”.takeLast();
QString mimeType=FileUtilities::getMIMEType(“.”+fileExt);
QString fileName=fileToUpload.split(“/”).takeLast();
qDebug()附加(textPart);
多部分->附加(folderPart);
请求设置URL(QUrl(“https://upload.box.com/api/2.0/files/content"));
QByteArray ba_auth=QString(“承载者”+m_访问令牌).toUtf8();
请求setRawHeader(“授权”,ba_auth);
m_netManager->post(请求,多部分);
回复将是上传到box.com的文件的详细信息。
谢谢大家在这个话题上对我的帮助
- 拉朱
我尝试使用qtapi发布多部分/表单数据。我不熟悉在Qt中使用libcurl。但我只在qtapi上获得了成功。这是我的密码
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(folderId.toUtf8());
QString fileExt = fileToUpload.split(".").takeLast();
QString mimeType = FileUtilities::getMIMEType("." + fileExt);
QString fileName = fileToUpload.split("/").takeLast();
qDebug() << "file name to upload : " << fileName;
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentTypeHeader, mimeType);
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; filename=\""+ fileName +"\"; name=\"filename\";"));
QFile *fileUpload = new QFile(fileToUpload);
fileUpload->open(QIODevice::ReadOnly);
textPart.setBodyDevice(fileUpload);
multiPart->append(textPart);
multiPart->append(folderPart);
req.setUrl(QUrl("https://upload.box.com/api/2.0/files/content"));
QByteArray ba_auth = QString("Bearer " + m_accessToken).toUtf8();
req.setRawHeader("Authorization", ba_auth);
m_netManager->post(req, multiPart);
multiPart=新的QHttpMultiPart(QHttpMultiPart::FormDataType);
QByteArray边界(“56354654654654321768987465413574634354658”);
多部分->设置边界(边界);
QHttpPart folderPart;
setHeader(QNetworkRequest::ContentDispositionHeader,QVariant(“表单数据;名称=\“文件夹id\”));
folderPart.setBody(folderId.toUtf8());
QString fileExt=fileToUpload.split(“.”.takeLast();
QString mimeType=FileUtilities::getMIMEType(“.”+fileExt);
QString fileName=fileToUpload.split(“/”).takeLast();
qDebug()附加(textPart);
多部分->附加(folderPart);
请求设置URL(QUrl(“https://upload.box.com/api/2.0/files/content"));
QByteArray ba_auth=QString(“承载者”+m_访问令牌).toUtf8();
请求setRawHeader(“授权”,ba_auth);
m_netManager->post(请求,多部分);
回复将是上传到box.com的文件的详细信息。
谢谢大家在这个话题上对我的帮助
- 拉朱
此外,我想指出,官方文件中显示的方式不起作用。
我尝试从以下方面实施解决方案:
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
但我一直收到来自服务器的“错误请求”错误。但Raju提出的解决方案仍然有效。
可能有人知道如何在QT中实现它。此外,我想注意,官方文档中显示的方式不起作用。
我尝试从以下方面实施解决方案:
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
但我一直收到来自服务器的“错误请求”错误。但Raju提出的解决方案仍然有效。
可能有人知道如何在QT中实现它。我可以用QT等效代码来实现吗?我来自Qt背景。我可以有Qt等效代码吗?我来自Qt的背景。老实说,这看起来更像是一个评论。很抱歉,但我仍然不能在其他帖子上留下评论-我的声誉还不够。。。我需要至少50个声誉来设置评论到其他用户的帖子。老实说,这看起来更像是一个评论。对此感到抱歉,但我仍然不能离开Commo