1

API を使用して Box からファイルをダウンロードしようとしていますが、応答がありません。

これが私のコードです:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.box.com/2.0/files/3934151224/content");
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_HTTPGET,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: BoxAuth api_key={myAPIkey}&auth_token={myToken}"));
$result = curl_exec($ch);
curl_close($ch);
print_r ($result);

実行しようとすると、空白のページが表示され、応答にも「名前を付けて保存」ウィンドウにも何も表示されません。

私が見逃しているのは何ですか。助けてください。前もって感謝します。

4

3 に答える 3

0

ボックスファイルをダウンロードするために次のコードを使用しています

   $url = "https://api.box.com/2.0/files/$fileId/content?access_token=$accessToken"

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $contents = curl_exec($ch);

    set_time_limit(0);
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-disposition: attachment; filename='.$filename);
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Expires: 0');
    header('Pragma: public');
    header('Content-Length: '.$filesize);

    print $contents;
于 2015-05-14T19:15:11.933 に答える
0

私はこの解決策に行きました:

//set the headers
$headers = array('Authorization: BoxAuth api_key=API_KEY&auth_token=AUTH_TOKEN');

//set the options
curl_setopt($curl, CURLOPT_URL, "https://api.box.com/2.0/files/".$fileid."/content");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //returns to a variable instead of straight to page
curl_setopt($curl, CURLOPT_HEADER, true); //returns headers as part of output
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); //I needed this for it to work
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); //I needed this for it to work

$headers = curl_exec($curl); //because the returned page is blank, this will include headers only

//parses the headers string into an array
$items = array();
$item = strtok($headers, " ");

while ($item !== false) {
  $items[] = $item;
  $item = strtok(" ");
}

//redirects to the 14th item in the array (link value) - 17 characters because of
//dodgy header parsing above.
header('Location: '.substr($items[14], 0, -17));

echo curl_error($curl);

curl_close($curl);

これは、Box API が実際には、ファイルの内容ではなく、302 リダイレクト ヘッダーを含む空白のページを返すためです。このようにして、ヘッダーを取得してそれをいじることができ、クライアントに送信する前にサーバーにファイルをダウンロードする必要はありません。

ヘッダー文字列を処理する方法が少しハッキリしていることはわかっていますが、それは重要な部分ではありません。後でクリーンアップします。

于 2012-11-29T03:48:15.210 に答える
0

ファイルの大きさは?次の 2 つの理由のいずれか (または両方) で、メモリが不足している可能性があります。

  1. 変数に割り当てることにより、応答全体をメモリに保存しています。CURLOPT_FILE オプションと有効なファイル リソースを使用して、cURL 出力をファイルに書き込むことを検討してください。
  2. 結果をprint_rすると、出力バッファリングが有効になっている可能性があります。これにより、すべての出力が再度メモリに保持されます。これは、print ob_get_level(); を実行することで簡単に確認できます。cURL 呼び出しの直前。
于 2012-11-12T13:35:36.373 に答える