Загрузка Dropbox в скрипте

У меня есть форма, которая позволяет пользователю заполнить несколько аспектов, а затем выбрать файл для загрузки.

Когда форма отправлена, я хочу написать некоторый код, который сохраняет файл в учетной записи Dropbox и получает доступ к прямой ссылке на скачивание и помещает ее в базу данных, которую я размещаю.

Если кто-то сделал это, есть ли определенный раздел API для просмотра? Или какие-нибудь примеры?

Я не могу найти это в API.

Благодарю.

2 ответа

Из того, что я вижу в API, это можно сделать. Вам нужно скачать Dropbox Core API. Внутри zip-файла вы найдете пример папки с примером кода для аутентификации, загрузки, скачивания, прямой ссылки и так далее. Просто посмотри direct-link.php и измените его под свои нужды. Вот проверенный рабочий пример загрузки файла и генерации прямой ссылки для скачивания:

<?php

require_once "dropbox-php-sdk-1.1.2/lib/Dropbox/autoload.php";

use \Dropbox as dbx;

$dropbox_config = array(
    'key'    => 'your_key',
    'secret' => 'your_secret'
);

$appInfo = dbx\AppInfo::loadFromJson($dropbox_config);
$webAuth = new dbx\WebAuthNoRedirect($appInfo, "PHP-Example/1.0");

$authorizeUrl = $webAuth->start();
echo "1. Go to: " . $authorizeUrl . "<br>";
echo "2. Click \"Allow\" (you might have to log in first).<br>";
echo "3. Copy the authorization code and insert it into $authCode.<br>";

$authCode = trim('DjsR-iGv4PAAAAAAAAAAAbn9snrWyk9Sqrr2vsdAOm0');

list($accessToken, $dropboxUserId) = $webAuth->finish($authCode);
echo "Access Token: " . $accessToken . "<br>";

$dbxClient = new dbx\Client($accessToken, "PHP-Example/1.0");

// Uploading the file
$f = fopen("working-draft.txt", "rb");
$result = $dbxClient->uploadFile("/working-draft.txt", dbx\WriteMode::add(), $f);
fclose($f);
print_r($result);

// Get file info
$file = $dbxClient->getMetadata('/working-draft.txt');

// sending the direct link:
$dropboxPath = $file['path'];
$pathError = dbx\Path::findError($dropboxPath);
if ($pathError !== null) {
    fwrite(STDERR, "Invalid <dropbox-path>: $pathError\n");
    die;
}

// The $link is an array!
$link = $dbxClient->createTemporaryDirectLink($dropboxPath);
// adding ?dl=1 to the link will force the file to be downloaded by the client.
$dw_link = $link[0]."?dl=1";

echo "Download link: ".$dw_link."<br>";

?>

Я сделал это очень быстро, чтобы заставить его работать. В конце концов вам, возможно, придется немного его настроить, чтобы он соответствовал вашим потребностям.

В руководстве по Core API есть раздел, смотрите эту ссылку. Таким образом, вы можете использовать часть загрузки следующим образом:

$f = file_get_contents('data.txt');
$result = $dbxClient->uploadFile("/data.txt", dbx\WriteMode::add(), $f);

echo 'file uploaded';
Другие вопросы по тегам