【问题标题】:Use Dropbox API with CodeIgniter将 Dropbox API 与 CodeIgniter 一起使用
【发布时间】:2017-11-27 17:30:33
【问题描述】:

尝试在 CodeIgniter 中重用以下 Dropbox API 代码。问题是让它在类方法和构造函数的约束下工作:

require_once('../dropbox-sdk-1.1.4/Dropbox/autoload.php');
use \Dropbox as dbx;
$accessToken = 'DROPBOX_ACCESSTOKEN';
$dbxClient = new dbx\Client($accessToken, "PHP-Example/1.0");

需要类似于以下内容,但不喜欢 'use \Dropbox as dbx' 行等:

class Controller_name extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        require_once('../dropbox-sdk-1.1.4/Dropbox/autoload.php');
        use \Dropbox as dbx;
    }

    public function access_dropbox()
    {
        $accessToken = 'DROPBOX_ACCESSTOKEN';
        $dbxClient = new dbx\Client($accessToken, "PHP-Example/1.0");

        $file = 'file.txt';

        $f = fopen( $file, "rb" );
        $result = $dbxClient->uploadFile( "/$file", dbx\WriteMode::add(), $f);
        fclose($f);
    }
}

使用下面的代码,我收到以下错误消息:

遇到未捕获的异常

类型:Kunnu\Dropbox\Exceptions\DropboxClientException

消息:调用 API 函数“文件/上传”时出错:HTTP 标头 “Dropbox-API-Arg”:路径:“db_backup”与模式不匹配 '(/(.|[\r\n]))|(ns:[0-9]+(/.)?)|(id:.*)'

文件名: /opt/lampp/htdocs/codeig-smythes/vendor/kunalvarma05/dropbox-php-sdk/src/Dropbox/Http/Clients/DropboxGuzzleHttpClient.php

行号:59

$file_path = 'public/sql_backup/db_backup_' .date("Y-m-d"). '.sql';

require_once('../vendor/autoload.php');

$app = new Kunnu\Dropbox\DropboxApp(
    'APP_KEY',
    'APP_SECRET',
    'ACCESS_TOKEN'
);

$dropbox = new Kunnu\Dropbox\Dropbox($app);
$dropboxFile = new Kunnu\Dropbox\DropboxFile(realpath($file_path));

$file = $dropbox->upload(
    $dropboxFile, basename($file_path), array('autorename' => TRUE)
);

【问题讨论】:

  • Use 语句放在类声明之前,例如 controller_name,这需要在事实之前进行 require。我真的不认为有必要在这里使用'use'语句,因为你可以做 new \Dropbox\Client(....
  • 我附加的代码现在可以工作了。我省略了正斜杠: $dropboxFile, "/".$file_path, array('autorename' => TRUE)
  • 很高兴看到它现在对您有用。我一直睡到大约 10 分钟前。我在 UTC -08:00 时区。

标签: codeigniter dropbox


【解决方案1】:

使用 Dropbox API 非常简单。我使用在 github 上找到的包:

https://github.com/kunalvarma05/dropbox-php-sdk

我没有使用 CodeIgniter 3 的作曲家自动加载功能。另外,我的供应商目录位于 FCPATH。

由于您似乎要上传文件,所以我将向您展示该示例:

$appKey      = '77fgftsb77joj77';
$appSecret   = 'fw77777tspam5y';
$accessToken = 'PMP7777777AAAAAAADFC_6JI7777777hY8xYhO7777777MJkpCKbBv';

if( is_file( $file_path ) )
{
    $file_path = realpath( $file_path );
    $file_name = basename( $file_path );

    require FCPATH . 'vendor/autoload.php';

    $app = new Kunnu\Dropbox\DropboxApp( 
        $appKey, 
        $appSecret, 
        $accessToken 
    );
    $dropbox = new Kunnu\Dropbox\Dropbox($app);
    $dropboxFile = new Kunnu\Dropbox\DropboxFile(
        $file_path
    );
    $file = $dropbox->upload(
        $dropboxFile, 
        '/backups/website/' . $file_name, 
        [
            'autorename' => TRUE
        ]
    );
}

【讨论】:

  • 这看起来不错,Brian,但我收到“未捕获的异常”错误(上面的代码)。
  • 您能分享一下您的 autoload.php 文件吗?
  • @JackSparrow,我的 config/autoload.php 文件没有任何修改。如果您在谈论 Composer 的 autoload.php 文件,那将是特定于应用程序的,因此在我的答案中显示内容是没有意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2023-04-05
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
相关资源
最近更新 更多