我们有一个后端系统,在表单填充时,会生成一个PDF-然后将该PDF上传到dropbox,并检索到该文件的链接,然后将该链接添加到数据库中,我们的供应商可以看到该链接。
我看了很多,但获得这些链接的唯一方法是使用createTemporaryDirectLink指令。但是,这些链接是临时的,几个小时后就会过期。
我希望获得可共享的非过期链接。
这是我目前运行良好的代码
// Dropbox //
$dropbox_config = array(
'key' => 'xxxx',
'secret' => 'xxxx'
);
$accessToken='xxx-xxxxx';
$appInfo = dbxAppInfo::loadFromJson($dropbox_config);
$webAuth = new dbxWebAuthNoRedirect($appInfo, "PHP-Example/1.0");
$dbxClient = new dbxClient($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', dbxWriteMode::add(), $f);
fclose($f);
print_r($result);
$file = $dbxClient->getMetadata("/Orders/".$rowGetDropLink['dropboxLink'].'.pdf');
$dropboxPath = $file['path'];
$pathError = dbxPath::findError($dropboxPath);
if ($pathError !== null) {
fwrite(STDERR, "Invalid <dropbox-path>: $pathErrorn");
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方法,该方法会导致临时链接被提取,该链接超时。
我们的供应商通常每两天检查一次这些文件,所以这是一个不可用的解决方案。
您可以使用createShareableLink
方法来代替createTemporaryDirectLink
方法:
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