我目前正在构建一个例程,需要从一个特定的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列表中的含义或应该如何格式化。
答案 0 :(得分:2)
entries
值应为list
dict
,每个文件要移动一个,每个文件都包含from_path
和to_path
。您的代码将entries
值提供为单个dict
。 (在PHP中,您可以使用list
关键字同时生成dict
和array
。)
当你把它分成碎片时,它更容易看到和使用。这是一个可以做到这一点的工作样本。
<?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),