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);
/**
* 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.
* @param Photo $photo Photo the thumbnail relates to.

View File

@ -62,10 +62,15 @@ class LocalFilesystemSource extends AlbumSourceBase implements IAlbumSource
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->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)

View File

@ -2,6 +2,7 @@
namespace App\AlbumSources;
use App\Photo;
use OpenCloud\OpenStack;
use Symfony\Component\HttpFoundation\File\File;
/**
@ -14,7 +15,7 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* Deletes an entire album's media contents.
* @return void
*/
function deleteAlbumContents()
public function deleteAlbumContents()
{
// 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.)
* @return void
*/
function deleteThumbnail(Photo $photo, $thumbnail = null)
public function deleteThumbnail(Photo $photo, $thumbnail = null)
{
// TODO: Implement deleteThumbnail() method.
}
@ -34,7 +35,7 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* Gets the name of this album source.
* @return string
*/
function getName()
public function getName()
{
return 'global.album_sources.openstack';
}
@ -45,7 +46,7 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* @param string $thumbnail Thumbnail to get the image to.
* @return string
*/
function getPathToPhoto(Photo $photo, $thumbnail = null)
public function getPathToPhoto(Photo $photo, $thumbnail = null)
{
// TODO: Implement getPathToPhoto() method.
}
@ -56,21 +57,36 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
* @param string $thumbnail Thumbnail to get the image to.
* @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.
* @param Photo $photo Photo the thumbnail relates to.
* @param string $thumbnailInfo Information about the thumbnail.
* @param string $tempFilename Filename containing the thumbnail.
* @param string $thumbnail Name of the thumbnail.
* @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.
* @return File
*/
function saveUploadedPhoto(File $uploadedFile, $overrideFilename = null)
public function saveUploadedPhoto(File $uploadedFile, $overrideFilename = null)
{
// 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)
{
/** @var Album $album */
$album = $this->photo->album;
$photoFile = join(DIRECTORY_SEPARATOR, [
FileHelper::getQueuePath($queueToken),
$this->photo->storage_file_name
@ -119,6 +116,9 @@ class PhotoService
$this->photo->is_analysed = true;
$this->photo->save();
// Save the original
$this->albumSource->saveOriginal($this->photo, $photoFile);
$this->regenerateThumbnails($originalPhotoResource);
}
@ -198,7 +198,7 @@ class PhotoService
foreach ($thumbnailsRequired as $thumbnail)
{
$generatedThumbnailPath = $this->imageHelper->generateThumbnail($originalPhotoResource, $this->photo, $thumbnail);
$this->albumSource->saveThumbnail($this->photo, $thumbnail, $generatedThumbnailPath);
$this->albumSource->saveThumbnail($this->photo, $generatedThumbnailPath, $thumbnail['name']);
}
}