2012-11-14 10 views
5

を使用してファイルをアップロードすることができます。http://developers.box.com/docs/どのように私はこのページでPHP

はカールを使用してファイルをアップロードします。

METHOD 
POST /files/content 
EXAMPLE REQUEST 
curl https://api.box.com/2.0/files/content \ 
-H "Authorization: BoxAuth api_key=API_KEY&auth_token=AUTH_TOKEN" \ 
-F [email protected]_NAME1 \ 
-F [email protected]_NAME2 \ 
-F folder_id=FOLDER_ID 

しかし、今、私はそれを行うことができるか、PHPを使用してファイルをアップロードします?私のコード:それは動作しませんでした、と私は使用してスクリプトを実行し

<?php  
$params = array(); 
$params['folder_id'] = '485272014'; 

$u_file = fopen("D:\code\php\bcs\test.data", "r"); 

$params['filename1'] = $u_file; 

$params = json_encode($params); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://api.box.com/2.0/files/content"); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); 

curl_setopt($ch, CURLOPT_UPLOAD, true); 



curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: BoxAuth api_key=API_KEY&auth_token=TOKEN")); 
$result = curl_exec($ch); 
curl_close($ch); 
print_r($result); 

fclose($u_file); 

?> 

php -f test.php

+0

が直接 '$ paramsは[ 'ファイル名1']をお試しください= "@D:\ code \ php \ bcs \ test.data"; ' – GBD

答えて

6
  1. 私はPOSTフォームデータをファイルハンドラが
    fopen("D:\code\php\bcs\test.data", "r");

    を使用して作成し受け入れることができるとは思いません

    代わりに@を使用してファイルハンドラにアクセスしてみてください。ところで/へ、変更\をので、あなたが誤ってエスケープ文字としていくつかの文字を入れないでください:
    $u_file = "@D:/code/php/bcs/test.data";

  2. あなたはいけないjson_encodeコンテンツ、ファイルの内容は、テキスト(と言い、画像/バイナリたものでなければファイル)。

  3. 私はこの行でも問題があると思います。私のコードをこのオプションで試してみたところ、 "441 Required length"というエラーが出ました。私のコードは、このオプションを使用せずに正常に動作します:
    curl_setopt($ch, CURLOPT_UPLOAD, true);

最後に、ここに私の作業のコードは次のとおりです。

<?php 
public function upload_file() 
{ 
    $url = 'https://api.box.com/2.0/files/content'; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); 

    //this is my method to construct the Authorisation header 
    $header_details = array($this->default_authen_header()); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header_details); 

    $post_vars = array(); 
    $post_vars['filename'] = "@C:/tmp_touch.txt"; 
    $post_vars['folder_id'] = 0; 

    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vars); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 
?> 
5
<?php 
    // ENTER YOUR DEVELOPER TOKEN 
    $token = "ekdfokeEdfdfkosdkoqwekof93kofsdfkosodSqd"; 

    $url = "https://upload.box.com/api/2.0/files/content"; 
    if (isset($_POST['btnUpload'])) { 
     $file_upload = $_FILES['file']['tmp_name']; 
     $json = json_encode(array(
           'name' => $_FILES['file']['name'], 
           'parent' => array('id' => 0) 
          )); 
     $fields = array(
         'attributes' => $json, 
         'file'=>new CurlFile($_FILES['file']['tmp_name'],$_FILES['file']['type'],$_FILES['file']['name']) 
       ); 

     try { 
      $ch = curl_init(); 
      curl_setopt($ch,CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
       'Authorization: Bearer '.$token, 
       'Content-Type:multipart/form-data' 
      )); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
      $response = curl_exec($ch); 
      curl_close($ch); 
     } catch (Exception $e) { 
      $response = $e->getMessage(); 
     } 

     print_r($response); 
    } 

?> 

<form method="post" name="frmUpload" enctype="multipart/form-data"> 
    <tr> 
     <td>Upload</td> 
     <td align="center">:</td> 
     <td><input name="file" type="file" id="file"/></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td align="center">&nbsp;</td> 
     <td><input name="btnUpload" type="submit" value="Upload" /></td> 
    </tr> 
</form> 

http://liljosh.com/uploading-files-to-box-content-api-v2/