BLUE-8: OpenStack driver is now uploading files to OS. Need another config field for the public URL to the container.

This commit is contained in:
Andy Heathershaw 2016-10-28 06:24:34 +01:00
parent aadc39684f
commit 005c5eb645
4 changed files with 73 additions and 16 deletions

View File

@ -45,6 +45,14 @@ interface IAlbumSource
*/ */
function getUrlToPhoto(Photo $photo, $thumbnail = null); function getUrlToPhoto(Photo $photo, $thumbnail = null);
/**
* Saves the original photo to its permanent location.
* @param Photo $photo Photo the original relates to.
* @param $tempFilename Filename containing the original image.
* @return mixed
*/
function saveOriginal(Photo $photo, $tempFilename);
/** /**
* Saves a generated thumbnail to its permanent location. * Saves a generated thumbnail to its permanent location.
* @param Photo $photo Photo the thumbnail relates to. * @param Photo $photo Photo the thumbnail relates to.

View File

@ -62,10 +62,15 @@ class LocalFilesystemSource extends AlbumSourceBase implements IAlbumSource
return $photoUrl; return $photoUrl;
} }
public function saveThumbnail(Photo $photo, $thumbnailInfo, $tempFilename) public function saveOriginal(Photo $photo, $tempFilename)
{
$this->saveThumbnail($photo, $tempFilename, $this->getOriginalsFolder());
}
public function saveThumbnail(Photo $photo, $tempFilename, $thumbnail)
{ {
$fileInfo = new File($tempFilename); $fileInfo = new File($tempFilename);
$fileInfo->move(sprintf('%s/%s', $this->getPathToAlbum(), $thumbnailInfo['name']), $photo->storage_file_name); $fileInfo->move(sprintf('%s/%s', $this->getPathToAlbum(), $thumbnail), $photo->storage_file_name);
} }
public function saveUploadedPhoto(File $uploadedFile, $overrideFilename = null) public function saveUploadedPhoto(File $uploadedFile, $overrideFilename = null)

View File

@ -2,6 +2,7 @@
namespace App\AlbumSources; namespace App\AlbumSources;
use App\Photo; use App\Photo;
use OpenCloud\OpenStack;
use Symfony\Component\HttpFoundation\File\File; use Symfony\Component\HttpFoundation\File\File;
/** /**
@ -14,7 +15,7 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* Deletes an entire album's media contents. * Deletes an entire album's media contents.
* @return void * @return void
*/ */
function deleteAlbumContents() public function deleteAlbumContents()
{ {
// TODO: Implement deleteAlbumContents() method. // TODO: Implement deleteAlbumContents() method.
} }
@ -25,7 +26,7 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* @param string $thumbnail Thumbnail to delete (or null to delete the original.) * @param string $thumbnail Thumbnail to delete (or null to delete the original.)
* @return void * @return void
*/ */
function deleteThumbnail(Photo $photo, $thumbnail = null) public function deleteThumbnail(Photo $photo, $thumbnail = null)
{ {
// TODO: Implement deleteThumbnail() method. // TODO: Implement deleteThumbnail() method.
} }
@ -34,7 +35,7 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* Gets the name of this album source. * Gets the name of this album source.
* @return string * @return string
*/ */
function getName() public function getName()
{ {
return 'global.album_sources.openstack'; return 'global.album_sources.openstack';
} }
@ -45,7 +46,7 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* @param string $thumbnail Thumbnail to get the image to. * @param string $thumbnail Thumbnail to get the image to.
* @return string * @return string
*/ */
function getPathToPhoto(Photo $photo, $thumbnail = null) public function getPathToPhoto(Photo $photo, $thumbnail = null)
{ {
// TODO: Implement getPathToPhoto() method. // TODO: Implement getPathToPhoto() method.
} }
@ -56,21 +57,36 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* @param string $thumbnail Thumbnail to get the image to. * @param string $thumbnail Thumbnail to get the image to.
* @return string * @return string
*/ */
function getUrlToPhoto(Photo $photo, $thumbnail = null) public function getUrlToPhoto(Photo $photo, $thumbnail = null)
{ {
// TODO: Implement getUrlToPhoto() method. return sprintf(
'%s/%s/%s/%s',
'https://photos-dev-898b0644.cdn.memsites.com',
$this->album->url_alias,
is_null($thumbnail) ? $this->getOriginalsFolder() : $thumbnail,
$photo->storage_file_name
);
}
public function saveOriginal(Photo $photo, $tempFilename)
{
$this->saveThumbnail($photo, $tempFilename, $this->getOriginalsFolder());
} }
/** /**
* Saves a generated thumbnail to its permanent location. * Saves a generated thumbnail to its permanent location.
* @param Photo $photo Photo the thumbnail relates to. * @param Photo $photo Photo the thumbnail relates to.
* @param string $thumbnailInfo Information about the thumbnail.
* @param string $tempFilename Filename containing the thumbnail. * @param string $tempFilename Filename containing the thumbnail.
* @param string $thumbnail Name of the thumbnail.
* @return mixed * @return mixed
*/ */
function saveThumbnail(Photo $photo, $thumbnailInfo, $tempFilename) public function saveThumbnail(Photo $photo, $tempFilename, $thumbnail)
{ {
// TODO: Implement saveThumbnail() method. $container = $this->getContainer();
$container->uploadObject(
sprintf('%s/%s/%s', $this->album->url_alias, $thumbnail, $photo->storage_file_name),
fopen($tempFilename, 'r+')
);
} }
/** /**
@ -79,8 +95,36 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* @param string $overrideFilename Specific file name to use, or null to randomly generate one. * @param string $overrideFilename Specific file name to use, or null to randomly generate one.
* @return File * @return File
*/ */
function saveUploadedPhoto(File $uploadedFile, $overrideFilename = null) public function saveUploadedPhoto(File $uploadedFile, $overrideFilename = null)
{ {
// TODO: Implement saveUploadedPhoto() method. // TODO: Implement saveUploadedPhoto() method.
} }
private function getClient()
{
return new OpenStack($this->configuration->auth_url, [
'username' => $this->configuration->username,
'password' => decrypt($this->configuration->password),
'tenantName' => $this->configuration->tenant_name,
]);
}
private function getContainer()
{
return $this->getStorageService()->getContainer($this->configuration->container_name);
}
private function getOriginalsFolder()
{
return '_originals';
}
private function getStorageService()
{
return $this->getClient()->objectStoreService(
$this->configuration->service_name,
$this->configuration->service_region,
'publicURL'
);
}
} }

View File

@ -51,9 +51,6 @@ class PhotoService
public function analyse($queueToken) public function analyse($queueToken)
{ {
/** @var Album $album */
$album = $this->photo->album;
$photoFile = join(DIRECTORY_SEPARATOR, [ $photoFile = join(DIRECTORY_SEPARATOR, [
FileHelper::getQueuePath($queueToken), FileHelper::getQueuePath($queueToken),
$this->photo->storage_file_name $this->photo->storage_file_name
@ -119,6 +116,9 @@ class PhotoService
$this->photo->is_analysed = true; $this->photo->is_analysed = true;
$this->photo->save(); $this->photo->save();
// Save the original
$this->albumSource->saveOriginal($this->photo, $photoFile);
$this->regenerateThumbnails($originalPhotoResource); $this->regenerateThumbnails($originalPhotoResource);
} }
@ -198,7 +198,7 @@ class PhotoService
foreach ($thumbnailsRequired as $thumbnail) foreach ($thumbnailsRequired as $thumbnail)
{ {
$generatedThumbnailPath = $this->imageHelper->generateThumbnail($originalPhotoResource, $this->photo, $thumbnail); $generatedThumbnailPath = $this->imageHelper->generateThumbnail($originalPhotoResource, $this->photo, $thumbnail);
$this->albumSource->saveThumbnail($this->photo, $thumbnail, $generatedThumbnailPath); $this->albumSource->saveThumbnail($this->photo, $generatedThumbnailPath, $thumbnail['name']);
} }
} }