Dropbox API - 错误:预期列表得到了dict

时间:2016-10-12 09:34:24

标签: php rest dropbox-api

我目前正在构建一个例程,需要从一个特定的Dropbox文件夹下载文件,将它们发送到另一个服务器,然后将它们移动到Dropbox上的另一个文件夹。

我正在使用Dropbox的/files/move_batch API端点来执行此操作。

以下是发送到API以移动多个文件的参数(我现在只是尝试移动一个文件,因为它仍然无效):

$params = array(
            'headers'           => array(
                'method'    => 'POST',
                'content-type' => 'application/json; charset=utf-8',
                ),
            'body' => json_encode(array(
                'entries'           => array(
                    'from_path' => self::$files[0],
                    'to_path'   => '/Applications/Archives/' . substr(self::$files[0], strrpos(self::$files[0], '/') + 1),
                    ),
                'autorename'        => true,
                )),
            );

但我一直收到同样的错误信息:

Error in call to API function "files/move_batch": request body: entries: expected list, got dict

我不知道API列表中的含义或应该如何格式化。

1 个答案:

答案 0 :(得分:2)

entries值应为list dict,每个文件要移动一个,每个文件都包含from_pathto_path 。您的代码将entries值提供为单个dict。 (在PHP中,您可以使用list关键字同时生成dictarray。)

当你把它分成碎片时,它更容易看到和使用。这是一个可以做到这一点的工作样本。

<?php

    $fileop1 = array(
                    'from_path' => "/test_39995261/a/1.txt",
                    'to_path'   => "/test_39995261/b/1.txt"
                );

    $fileop2 = array(
                    'from_path' => "/test_39995261/a/2.txt",
                    'to_path'   => "/test_39995261/b/2.txt"
                );

    $parameters = array(
            'entries' => array($fileop1, $fileop2),
            'autorename' => true,
    );

    $headers = array('Authorization: Bearer <ACCESS_TOKEN>',
                     'Content-Type: application/json');

    $curlOptions = array(
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode($parameters),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_VERBOSE => true
        );

    $ch = curl_init('https://api.dropboxapi.com/2/files/move_batch');
    curl_setopt_array($ch, $curlOptions);

    $response = curl_exec($ch);
    echo $response;

    curl_close($ch);

?>

要使用此批处理端点仅移动一个文件,您可以将该行更改为:

            'entries' => array($fileop1),