php - Dropbox API v2 PHP 上传文件问题

标签 php curl dropbox dropbox-api dropbox-php

我正在尝试使用 Dropbox API v2 上传文件。 遗憾的是,Dropbox API v2 没有 PHP 库。

https://www.dropbox.com/developers/documentation/http/documentation#files-upload

这是我的代码:

$token = 'sometoken'; // oauth token

$headers = array("Authorization: Bearer ". $token,
    'Dropbox-API-Arg: {"path": "/test.txt","mode": "add","autorename": true,"mute":false}',
    "Content-Type: application/octet-stream");


$url = 'https://content.dropboxapi.com/2/files/upload';

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);

$path = './google/file.json';
$fp = fopen($path, 'rb');
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($path));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


//curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);


$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo($response.'<br/>');
echo($http_code.'<br/>');

curl_close($ch);
echo $response;

它创建 test.txt 但 0 字节。 当我检查代码时,它读取 0 字节。

这是代码执行的输出:

*   Trying 45.58.74.164...
* Connected to content.dropboxapi.com (45.58.74.164) port 443 (#0)
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: C:\xampp\php\extras\ssl\cacert.pem
  CApath: none
* NPN, negotiated HTTP1.1
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* Server certificate:
*  subject: OU=Domain Control Validated; CN=dl.dropboxusercontent.com
*  start date: Jul  9 01:10:38 2016 GMT
*  expire date: May  7 20:27:38 2017 GMT
*  subjectAltName: host "content.dropboxapi.com" matched cert's "content.dropboxapi.com"
*  issuer: C=US; ST=Arizona; L=Scottsdale; O=GoDaddy.com, Inc.; OU=http://certs.godaddy.com/repository/; CN=Go Daddy Secure Certificate Authority - G2
*  SSL certificate verify ok.
> POST /2/files/upload HTTP/1.1
Host: content.dropboxapi.com
Accept: */*
Authorization: Bearer sometoken
Dropbox-API-Arg: {"path": "/test.txt","mode": "add","autorename": true,"mute":false}
Content-Type: application/octet-stream
Expect: 100-continue

< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Server: nginx
< Date: Thu, 15 Sep 2016 13:37:16 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
< pragma: no-cache
< cache-control: no-cache
< X-Server-Response-Time: 461
< X-Dropbox-Request-Id: 7b0003052a45a92fac0e7afca80f4f4c
< X-Robots-Tag: noindex, nofollow, noimageindex
<
* Connection #0 to host content.dropboxapi.com left intact
{"name": "test.txt", "path_lower": "/test.txt", "path_display": "/test.txt", "id": "id:L2W5zzeox5IAAAAAAAAjvg", "client_modified": "2016-09-15T13:37:16Z", "server_modified": "2016-09-15T13:37:16Z", "rev": "ee6e21bf2e5c", "size": 0}<br/>200<br/>{"name": "test.tx
t", "path_lower": "/test.txt", "path_display": "/test.txt", "id": "id:L2W5zzeox5IAAAAAAAAjvg", "client_modified": "2016-09-15T13:37:16Z", "server_modified": "2016-09-15T13:37:16Z", "rev": "ee6e21bf2e5c", "size": 0}

最佳答案

我找到了答案。

$api_url = 'https://content.dropboxapi.com/2/files/upload'; //dropbox api url
        $token = 'some value'; // oauth token

        $headers = array('Authorization: Bearer '. $token,
            'Content-Type: application/octet-stream',
            'Dropbox-API-Arg: '.
            json_encode(
                array(
                    "path"=> '/'. basename($filename),
                    "mode" => "add",
                    "autorename" => true,
                    "mute" => false
                )
            )

        );

        $ch = curl_init($api_url);

        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POST, true);

        $path = $filename;
        $fp = fopen($path, 'rb');
        $filesize = filesize($path);

        curl_setopt($ch, CURLOPT_POSTFIELDS, fread($fp, $filesize));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//        curl_setopt($ch, CURLOPT_VERBOSE, 1); // debug

        $response = curl_exec($ch);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        echo($response.'<br/>');
        echo($http_code.'<br/>');

        curl_close($ch);

关于php - Dropbox API v2 PHP 上传文件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39504896/

相关文章:

javascript - lat 和 lng 未正确插入数据库中

javascript - 在没有 LMS 的情况下使用 SCORM 运行时 API?

php - 如何使用 pkcs12 (p12) 证书发送到 Transunion API?

php - 未捕获的 CurlException : 28: SSL connection timeout - Facebook PHP SDK

java - 使用 Dropbox API 为 Dropbox 中的所有文件创建可共享链接

php - 上传到 Dropbox 时增加 Heroku 中文件上传大小的限制

php - 防止 wordpress 在上传前影响图像质量

unix - 我如何区分网络上的两个文件

node.js - 借助 Windows Azure,我可以使用 Dropbox 部署 Node.js 服务器吗?

php - 如果提交后已经过了一个小时则更新记录