Pull 135: Backblaze B2 storage driver #138
@ -102,8 +102,31 @@ class BackblazeB2Source extends AlbumSourceBase implements IAlbumSource
|
|||||||
public function getUrlToPhoto(Photo $photo, $thumbnail = null)
|
public function getUrlToPhoto(Photo $photo, $thumbnail = null)
|
||||||
{
|
{
|
||||||
$client = $this->getClient();
|
$client = $this->getClient();
|
||||||
$storagePathToFile = $this->getPathToPhoto($photo, $thumbnail);
|
$pathOnStorage = $this->getPathToPhoto($photo, $thumbnail);
|
||||||
|
|
||||||
|
switch ($this->bucketType)
|
||||||
|
{
|
||||||
|
case self::BUCKET_TYPE_PRIVATE:
|
||||||
|
if (is_null($this->downloadToken))
|
||||||
|
{
|
||||||
|
$this->downloadToken = $client->getDownloadAuthToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Once I sort out the issue with b2_download_file_by_id, this line can be removed
|
||||||
|
return sprintf('%s/file/%s/%s?Authorization=%s', $client->getDownloadUrl(), $this->configuration->container_name, $pathOnStorage, $this->downloadToken);
|
||||||
|
|
||||||
|
/** @var BackblazeB2FileIdCache $b2Cache */
|
||||||
|
$b2Cache = BackblazeB2FileIdCache::where('storage_path', $pathOnStorage)->first();
|
||||||
|
if (is_null($b2Cache))
|
||||||
|
{
|
||||||
|
// TODO: lookup the file on B2 to get the file ID
|
||||||
|
Log::warning(sprintf('B2 file ID not found in cache: %s', $pathOnStorage));
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%s/b2api/v2/b2_download_file_by_id?fileId=%s&Authorization=%s', $client->getDownloadUrl(), urlencode($b2Cache->b2_file_id), urlencode($this->downloadToken));
|
||||||
|
|
||||||
|
case self::BUCKET_TYPE_PUBLIC:
|
||||||
/*
|
/*
|
||||||
* From https://www.backblaze.com/b2/docs/b2_download_file_by_name.html:
|
* From https://www.backblaze.com/b2/docs/b2_download_file_by_name.html:
|
||||||
* The base URL to use comes from the b2_authorize_account call, and looks something like
|
* The base URL to use comes from the b2_authorize_account call, and looks something like
|
||||||
@ -111,21 +134,7 @@ class BackblazeB2Source extends AlbumSourceBase implements IAlbumSource
|
|||||||
* number containing your account. To this base, you add "file/", your bucket name, a "/", and then the
|
* number containing your account. To this base, you add "file/", your bucket name, a "/", and then the
|
||||||
* name of the file. The file name may itself include more "/" characters.
|
* name of the file. The file name may itself include more "/" characters.
|
||||||
*/
|
*/
|
||||||
$fileDownloadUrl = sprintf('%s/file/%s/%s', $client->getDownloadUrl(), $this->configuration->container_name, $storagePathToFile);
|
return sprintf('%s/file/%s/%s', $client->getDownloadUrl(), $this->configuration->container_name, $pathOnStorage);
|
||||||
|
|
||||||
switch ($this->bucketType)
|
|
||||||
{
|
|
||||||
case self::BUCKET_TYPE_PRIVATE:
|
|
||||||
// TODO: use the B2 b2_download_file_by_id method so filenames are harder to guess
|
|
||||||
if (is_null($this->downloadToken))
|
|
||||||
{
|
|
||||||
$this->downloadToken = $client->getDownloadAuthToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
return sprintf('%s?Authorization=%s', $fileDownloadUrl, $this->downloadToken);
|
|
||||||
|
|
||||||
case self::BUCKET_TYPE_PUBLIC:
|
|
||||||
return $fileDownloadUrl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user