2012-11-14 19 views
5

Trên trang này: http://developers.box.com/docs/làm thế nào tôi có thể tải lên một tập tin sử dụng PHP

Tải lên tập tin sử dụng 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 

Nhưng Bây giờ, tôi muốn tải lên một tập tin sử dụng php, làm thế nào tôi có thể làm điều đó ? mã của tôi:

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

?> 

nó đã không làm việc, và tôi chạy kịch bản sử dụng: php -f test.php

+0

Hãy thử trực tiếp '$ params [ 'filename1'] = "@D: \ code \ php \ bcs \ test.data"; – GBD

Trả lời

6
  1. Tôi không nghĩ POST dữ liệu mẫu có thể chấp nhận xử lý tập tin tạo bằng
    fopen("D:\code\php\bcs\test.data", "r");

    Thử truy cập trình xử lý tệp bằng cách sử dụng @ thay thế. Btw, thay đổi \ to /, do đó bạn không vô tình đưa một số nhân vật như nhân vật chạy thoát:
    $u_file = "@D:/code/php/bcs/test.data";

  2. Bạn không nên json_encode nội dung, nếu nội dung tập tin của bạn không phải là văn bản (nói, một hình ảnh/nhị phân tập tin) .

  3. Tôi nghĩ rằng dòng này cũng mang lại cho bạn sự cố. Đã thử mã của tôi với tùy chọn này, đã ném cho tôi một lỗi "441 Độ dài bắt buộc" kỳ lạ. Mã của tôi hoạt động tốt mà không cần tùy chọn này:
    curl_setopt($ch, CURLOPT_UPLOAD, true);

Cuối cùng, đây là mã làm việc của tôi:

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

Các vấn đề liên quan