2012-11-14 26 views
5

In questa pagina: http://developers.box.com/docs/come posso caricare un file utilizzando PHP

caricare un file utilizzando cURL:

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 

Ma ora, voglio caricare un file utilizzando PHP, come potrei farlo ? il mio codice:

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

?> 

non ha funzionato, e ho eseguito lo script utilizzando: php -f test.php

+0

Prova direttamente $ params '[ 'nomefile1'] = "@D: \ code \ php \ bcs \ test.data"; ' – GBD

risposta

6
  1. non credo POST dati del modulo può accettare gestore di file creato utilizzando
    fopen("D:\code\php\bcs\test.data", "r");

    Provare ad accedere al gestore di file usando @ invece. Btw, cambiare \ a/in modo da non accidentalmente mettere un po 'di carattere come carattere di escape:
    $u_file = "@D:/code/php/bcs/test.data";

  2. Non si dovrebbe json_encode il contenuto, che cosa se il contenuto del file non è un testo (dice, un'immagine/binaria file) .

  3. Penso che questa linea ti dia problemi. Ho provato il mio codice con questa opzione, mi ha lanciato uno strano errore "441 Lunghezza richiesta". Il mio codice funziona bene senza questa opzione:
    curl_setopt($ch, CURLOPT_UPLOAD, true);

Infine, ecco il mio codice di lavoro:

<?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/

Problemi correlati