cURL到PHP的翻译问题


cURL to PHP Translation Issues

好的。。。我想不通的新手问题。以下是Box.com文档中关于上传文件的说明:

curl https://upload.box.com/api/2.0/files/content '
  -H "Authorization: Bearer ACCESS_TOKEN" -X POST '
  -F attributes='{"name":"tigers.jpeg", "parent":{"id":"11446498"}}' '
  -F file=@myfile.jpg

我正在PHP中尝试这个:

$attributes='{"name":"tigers.jpeg", "parent":{"id":"4224475591"}}';
 $headr = array();
$headr[] = 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxx';
$prep_data = array('file'=>'data08.13.15.csv','attributes' => $attributes);
$post_data=  http_build_query($prep_data) . "'n";
$url = 'https://upload.box.com/api/2.0/files/content';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec( $ch );
var_dump($response);

我正在为我的var_dump($response); 取回string(0) ""

我在这里做错了什么?

您没有指定它是多部分表单数据。不确定你是否也有其他问题。但这里有一些工作代码,你可以更改以满足你的需求:

<?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">
    <label>Upload file to Box
        <input name="file" type="file" id="file"/>
    </label>
    <input name="btnUpload" type="submit" value="Upload" />
</form>

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