#123: Images are now uploaded to the storage driver specified using the new IAnalysisQueueSource interface
This commit is contained in:
parent
bb5ed4d68d
commit
7a71a06e4e
@ -2,12 +2,13 @@
|
||||
|
||||
namespace App\AlbumSources;
|
||||
|
||||
use App\Helpers\MiscHelper;
|
||||
use App\Photo;
|
||||
use Guzzle\Http\EntityBody;
|
||||
use Guzzle\Http\Exception\ClientErrorResponseException;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class AmazonS3Source extends AlbumSourceBase implements IAlbumSource
|
||||
class AmazonS3Source extends AlbumSourceBase implements IAlbumSource, IAnalysisQueueSource
|
||||
{
|
||||
/**
|
||||
* Deletes an entire album's media contents.
|
||||
@ -103,6 +104,28 @@ class AmazonS3Source extends AlbumSourceBase implements IAlbumSource
|
||||
$this->getClient()->upload($this->configuration->container_name, $photoPath, fopen($tempFilename, 'r+'), 'public-read');
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads a new file to the analysis queue specified by queue token.
|
||||
*
|
||||
* @param string $sourceFilePath Path to the file to upload to the analysis queue
|
||||
* @param string $queueToken Queue token to hold the photo
|
||||
* @param string $overrideFilename Use a specific filename, or false to set a specific name
|
||||
* @return string Path to the file
|
||||
*/
|
||||
public function uploadToAnalysisQueue($sourceFilePath, $queueToken, $overrideFilename = null)
|
||||
{
|
||||
$targetPath = sprintf(
|
||||
'%s/%s',
|
||||
$this->getPathToAnalysisQueue($queueToken),
|
||||
is_null($overrideFilename) ? MiscHelper::randomString(20) : $overrideFilename
|
||||
);
|
||||
|
||||
// Note: we don't use "public-read" here as it will not be publicly-accessible, and will be retrieved by an authenticated client
|
||||
$this->getClient()->upload($this->configuration->container_name, $targetPath, fopen($sourceFilePath, 'r+'));
|
||||
|
||||
return $targetPath;
|
||||
}
|
||||
|
||||
private function getClient()
|
||||
{
|
||||
$config = [
|
||||
@ -127,6 +150,11 @@ class AmazonS3Source extends AlbumSourceBase implements IAlbumSource
|
||||
return '_originals';
|
||||
}
|
||||
|
||||
private function getPathToAnalysisQueue($queueToken)
|
||||
{
|
||||
return sprintf('analysis-queue/%s', $queueToken);
|
||||
}
|
||||
|
||||
private function getPathToPhoto(Photo $photo, $thumbnail = null)
|
||||
{
|
||||
return sprintf(
|
||||
|
24
app/AlbumSources/IAnalysisQueueSource.php
Normal file
24
app/AlbumSources/IAnalysisQueueSource.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\AlbumSources;
|
||||
|
||||
use App\Storage;
|
||||
|
||||
interface IAnalysisQueueSource
|
||||
{
|
||||
/**
|
||||
* @param Storage $configuration
|
||||
* @return mixed
|
||||
*/
|
||||
function setConfiguration(Storage $configuration);
|
||||
|
||||
/**
|
||||
* Uploads a new file to the analysis queue specified by queue token.
|
||||
*
|
||||
* @param string $sourceFilePath Path to the file to upload to the analysis queue
|
||||
* @param string $queueToken Queue token to hold the photo
|
||||
* @param string $overrideFilename Use a specific filename, or false to set a specific name
|
||||
* @return string Path to the file
|
||||
*/
|
||||
function uploadToAnalysisQueue($sourceFilePath, $queueToken, $overrideFilename = null);
|
||||
}
|
27
app/Helpers/AnalysisQueueHelper.php
Normal file
27
app/Helpers/AnalysisQueueHelper.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Helpers;
|
||||
|
||||
use App\AlbumSources\IAnalysisQueueSource;
|
||||
use App\Facade\UserConfig;
|
||||
use App\Storage;
|
||||
|
||||
class AnalysisQueueHelper
|
||||
{
|
||||
/**
|
||||
* Gets the storage queue source in use.
|
||||
* @return IAnalysisQueueSource
|
||||
*/
|
||||
public static function getStorageQueueSource()
|
||||
{
|
||||
$queueStorage = Storage::find(UserConfig::get('analysis_queue_storage_location'));
|
||||
|
||||
$fullClassName = sprintf('App\AlbumSources\%s', $queueStorage->source);
|
||||
|
||||
/** @var IAnalysisQueueSource $source */
|
||||
$source = new $fullClassName;
|
||||
$source->setConfiguration($queueStorage);
|
||||
|
||||
return $source;
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ use App\AlbumSources\IAlbumSource;
|
||||
use App\Facade\Image;
|
||||
use App\Facade\Theme;
|
||||
use App\Facade\UserConfig;
|
||||
use App\Helpers\AnalysisQueueHelper;
|
||||
use App\Helpers\FileHelper;
|
||||
use App\Helpers\ImageHelper;
|
||||
use App\Helpers\MiscHelper;
|
||||
@ -16,6 +17,7 @@ use App\Photo;
|
||||
use App\QueueItem;
|
||||
use App\Services\PhotoService;
|
||||
use App\Services\RabbitMQService;
|
||||
use App\Storage;
|
||||
use App\Upload;
|
||||
use App\UploadPhoto;
|
||||
use App\User;
|
||||
@ -298,7 +300,7 @@ class PhotoController extends Controller
|
||||
throw new \Exception('No queue_token value was provided!');
|
||||
}
|
||||
|
||||
$queueFolder = FileHelper::getQueuePath($queueUid);
|
||||
$queueStorage = AnalysisQueueHelper::getStorageQueueSource();
|
||||
|
||||
foreach ($photoFiles as $photoFile)
|
||||
{
|
||||
@ -316,26 +318,33 @@ class PhotoController extends Controller
|
||||
$photo->raw_exif_data = null;
|
||||
|
||||
/** @var File $savedFile */
|
||||
$queueFolder = FileHelper::getQueuePath($queueUid);
|
||||
$savedFile = FileHelper::saveUploadedFile($photoFile, $queueFolder, $photo->storage_file_name);
|
||||
|
||||
$this->removeExistingActivityRecords($photo, 'photo.uploaded');
|
||||
$this->removeExistingActivityRecords($photo, 'photo.taken');
|
||||
|
||||
$photo->file_name = $photoFile->getClientOriginalName();
|
||||
$photo->mime_type = $savedFile->getMimeType();
|
||||
$photo->file_size = $savedFile->getSize();
|
||||
$photo->storage_file_name = $savedFile->getFilename();
|
||||
}
|
||||
else
|
||||
{
|
||||
/** @var File $savedFile */
|
||||
$savedFile = FileHelper::saveUploadedFile($photoFile, $queueFolder);
|
||||
$queuedFileName = $queueStorage->uploadToAnalysisQueue($photoFile, $queueUid);
|
||||
$uploadedTempFile = new File($photoFile);
|
||||
|
||||
$photo = new Photo();
|
||||
$photo->album_id = $album->id;
|
||||
$photo->user_id = Auth::user()->id;
|
||||
$photo->name = pathinfo($photoFile->getClientOriginalName(), PATHINFO_FILENAME);
|
||||
$photo->storage_file_name = $savedFile->getFilename();
|
||||
|
||||
$photo->file_name = $photoFile->getClientOriginalName();
|
||||
$photo->mime_type = $uploadedTempFile->getMimeType();
|
||||
$photo->file_size = $uploadedTempFile->getSize();
|
||||
$photo->storage_file_name = basename($queuedFileName);
|
||||
}
|
||||
|
||||
$photo->file_name = $photoFile->getClientOriginalName();
|
||||
$photo->mime_type = $savedFile->getMimeType();
|
||||
$photo->file_size = $savedFile->getSize();
|
||||
$photo->is_analysed = false;
|
||||
$photo->save();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user