Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何将文件上载到box?我有卷曲代码_Qt_Curl_Box Api_Qtnetwork - Fatal编程技术网

Qt 如何将文件上载到box?我有卷曲代码

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参数的位置。我试着在正文中发帖,但它给出了错误。还有,请告诉我在哪里张贴文件

我正在我的应用程序中集成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参数的位置。我试着在正文中发帖,但它给出了错误。还有,请告诉我在哪里张贴文件内容


谢谢。

编辑:看起来你在我发布答案后就删除了你的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