2013-08-29 53 views
1

我正在整合盒雲在我的應用程序。我正在與Qt平臺合作。如何上傳文件到盒子?我有捲曲代碼

在箱子文件中,他們說這樣張貼的是捲曲的。

curl https://upload.box.com/api/2.0/files/content \ 
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ 
-F [email protected]_NAME \ 
-F folder_id=FOLDER_ID 

在哪裏指定文件名和folder_id參數。我已經嘗試通過張貼在身體,但它給錯誤。還請告訴我在哪裏發佈文件內容。

謝謝。

回答

3

我嘗試通過使用Qt API發佈multipart/form-data。我不熟悉在Qt中使用libcurl。但我只用Qt API取得了成功。這是我的代碼。

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); 

答案將是已上傳到box.com的文件的詳細信息。 感謝大家在這個話題上的幫助。

  • 拉朱
+0

+1回來和回答你自己的問題。 – DeeDee

1

編輯:它看起來像我發佈我的答案後刪除您的PHP標記。這可能與您的問題無關。

看來,盒子文檔告訴你如何從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")); 

然後你執行卷曲並捕獲響應中$result,您可以echo並檢查:

$result=curl_exec($ch); 
curl_close($ch); 
echo $result; 

因爲您通過https訪問,您可能也必須使用set some SSL options

+0

我可以有qt等效代碼嗎?我來自Qt背景。 – raju

0

編輯:如果使用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); 
0

此外,我要注意到,官方文檔中顯示的方式是行不通的。 我試圖執行從https://developer.box.com/reference#upload-a-file解決方案,它看起來像這樣:

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 [email protected] 

但我有從服務器「錯誤的請求」錯誤所有的時間。但Raju顯示的解決方案仍在工作。 可能有人知道如何在QT中實現它。

+0

老實說,這看起來更像是一條評論。 – mrun

+0

對不起,但我仍然不能留下評論給其他職位 - 我的名聲是不夠的...我至少需要50個聲望才能給其他用戶發表評論。 –