使用PHP上传文件

I have set up an HTML form to select a file and submit it to a PHP script which will upload it. I cannot use move_uploaded_files() because Box's API requires that I add a HTTP Header for Authorization: access_token. What I've done is set up my own POST method using the cURL library.

The problem I'm running into is setting the filename correctly, as it requires the full path of the file. I cannot get the full path of the file from the HTML form and using $_FILES['filename']['tmp_name'] uploads a .tmp file which I do not want. Does anyone know the solution to this problem? Thanks a lot!

My code:

public function upload_file($file) {
        $url = 'https://api.box.com/2.0/files/content';
        $params = [
            'filename' => '@'.$file['tmp_name'],
            'folder_id' => '0'
        ];
        $header = "Authorization: Bearer ".$this->access_token;
        $data = $this->post($url, $params, $header);
    }

public function post($url, $params, $header='') {
        $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_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        if(!empty($header)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
        }
        $data = curl_exec($ch);
        curl_close($ch);

        return $data;
    }

Suggest you do one of the following:

  1. Use move_uploaded_files to upload file into some directory and use that location to send the file to box using curl. After successful upload you can delete the file from this directory.
  2. Instead of uploading the file through PHP, you can upload them client side using the cors http://developers.blog.box.com/2013/05/13/uploading-files-with-cors/

Another question which I have in my mind is how are you keeping your access_token refreshed?

  • Vishal

I agree with what Vishal has suggested in point number one.

I have written the PHP SDK for v2

Just include the api class and initiate the class:

<?php
    include('library/BoxAPI.class.php');

    $client_id = 'CLIENT ID';
    $client_secret = 'CLIENT SECRET';
    $redirect_uri = 'REDIRECT URL';
    $box = new Box_API($client_id, $client_secret, $redirect_uri);

    if(!$box->load_token()){
        if(isset($_GET['code'])){
            $token = $box->get_token($_GET['code'], true);
            if($box->write_token($token, 'file')){
                $box->load_token();
            }
        } else {
            $box->get_code();
        }
    }
    // Upload file
    $box->put_file('RELATIVE FILE URL', '0'));
?>

Have a look here Download: BoxPHPAPI