2016-04-19 5 views
0

У нас есть бэкэнд-система, где при заполнении формы создается PDF-файл - этот PDF затем загружается в Dropbox и извлекается ссылка на файл, который затем добавляется в базу данных и отображается наших поставщиков.Получение постоянных ссылок из Dropbox

Я посмотрел высоко и низко - но единственный способ получить эти ссылки - использовать директиву createTemporaryDirectLink. Однако эти ссылки являются временными и истекают через несколько часов.

Я ищу, чтобы обеспечить совместное использование Не истекает ссылок.

Вот мой текущий код, который отлично работает

// Dropbox // 
     $dropbox_config = array(
     'key' => 'xxxx', 
     'secret' => 'xxxx' 
     ); 

     $accessToken='xxx-xxxxx'; 

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


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

     $sqlQuery = "select dropboxLink from get_order where orderId='".$lastOrderId."'"; 
     $rsGetDropLink = mysqli_query($dbLink,$sqlQuery); 
     $rowGetDropLink = mysqli_fetch_assoc($rsGetDropLink); 

     $f = fopen("Orders/".$rowGetDropLink['dropboxLink'].'.pdf', "rb"); 
     $result = $dbxClient->uploadFile("/Orders/".$rowGetDropLink['dropboxLink'].'.pdf', dbx\WriteMode::add(), $f); 
     fclose($f); 
     print_r($result); 

     $file = $dbxClient->getMetadata("/Orders/".$rowGetDropLink['dropboxLink'].'.pdf'); 
     $dropboxPath = $file['path']; 
     $pathError = dbx\Path::findError($dropboxPath); 
     if ($pathError !== null) { 
     fwrite(STDERR, "Invalid <dropbox-path>: $pathError\n"); 
     die; 
     } 
     $link = $dbxClient->createTemporaryDirectLink($dropboxPath); 
     $dw_link = $link[0]."?dl=1"; 

     $sqlQuery = "update get_order set fullDropboxLink='".$dw_link."' where orderId='".$lastOrderId."'"; 
     mysqli_query($dbLink,$sqlQuery); 

     // Dropbox ends// 
     header("location: thankyou.php?ordId=".$lastOrderId.'&categoryId='.$_REQUEST['categoryId']); 

Как вы можете видеть, мы используем метод createTemporaryDirectLink, что приводит к временной ссылке будучи неправдоподобным, который истек сверхурочно.

Наши продавцы часто проверяют эти файлы каждые два дня, поэтому это неиспользуемое решение.

ответ

0

Вместо того, чтобы использовать метод createTemporaryDirectLink, вы можете использовать метод createShareableLink:

https://dropbox.github.io/dropbox-sdk-php/api-docs/v1.1.x/class-Dropbox.Client.html#_createShareableLink

Это даст вам общую связь, которая не истечет. Следует отметить еще несколько вещей:

  • Эти ссылки могут быть отозваны.
  • Ссылка будет отображаться на странице пользователя https://www.dropbox.com/links.
  • По умолчанию эти ссылки указывают на страницу предварительного просмотра, а не на содержимое самого файла.

Последний пункт можно решить, как показано здесь, хотя:

https://www.dropbox.com/help/201

+0

Привет Грег, я должен просто заменить createTemporaryDirectLink с createShareableLink или будет код нужен капитальный ремонт, а? – user1595112

+0

Значения возврата немного отличаются, поэтому вам нужно обновить код, чтобы он соответствовал. – Greg