【发布时间】:2015-06-25 14:16:09
【问题描述】:
我正在通过将图像加载到 Amazon S3 并使用 beanstalkd 对图像处理进行排队来使用 laravel 进行一些测试。请注意,这只是测试。
这是我的实现:
// 路由.php
Route::post('/', function()
{
$validator = Validator::make(Input::all(), array(
'title' => 'required',
'file' => 'required|mimes:jpeg,jpg,png',
));
if( $validator->fails() )
{
return Redirect::to('/');
}
// Upload File
$file = Input::file('file');
$now = new DateTime;
$hash = md5( $file->getClientOriginalName().$now->format('Y-m-d H:i:s') );
$key = $hash.'.'.$file->getClientOriginalExtension();
$s3 = AWS::createClient('s3');
$s3->putObject(array(
'Bucket' => 'bellated',
'Key' => $key,
'SourceFile' => $file->getRealPath(),
'ContentType' => $file->getClientMimeType(),
));
// Create job
Queue::push('\Proc\Worker\ImageProcessor', array(
'bucket' => 'bellated',
'hash' => $hash,
'key' => $key,
'ext' => $file->getClientOriginalExtension(),
'mimetype' => $file->getClientMimeType(),
));
Log::info('queue processed');
return Redirect::to('/complete');
});
// 图像处理器
<?php namespace Proc\Worker;
use Imagine\Gd\Imagine;
use Imagine\Image\Box;
class ImageProcessor {
protected $width;
protected $height;
protected $image;
public function fire($job, $data)
{
$s3 = \AWS::createClient('s3');
try {
$response = $s3->getObject(array(
'Bucket' => $data['bucket'],
'Key' => $data['key'],
));
} catch (Exception $e) {
return;
}
$imagine = new Imagine();
$image = $imagine->load( (string)$response->get('Body') );
$size = new Box(100, 100);
$thumb = $image->thumbnail($size);
$s3->putObject(array(
'Bucket' => 'bellated',
'Key' => $data['hash'].'_100x100.'.$data['ext'],
'Body' => $thumb->get($data['ext']),
'ContentType' => $data['mimetype'],
));
}
}
当我将“同步”作为队列时 - 一切正常,我在 Amazon 中获得了两个图像(原始图像和调整大小),但是在我切换到“beanstlakd”并运行 php artisan queue:listen 后,我不断收到此错误:
Next exception 'Aws\S3\Exception\S3Exception'
with message 'Error executing "GetObject"
on "https://s3.eu-central-1.amazonaws.com/bellated/cd05ec14f7a19047828d7ed79d192ee3.jpg";
AWS HTTP error:
Client error: 404 NoSuchKey
(client): The specified key does not exist. -
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>cd05ec14f7a19047828d7ed79d192ee3.jpg</Key>
<RequestId>9390AD2904820C3E</RequestId>
<HostId>
nZK1ivZn3bs6xy0S/tGe+A7yoZgKKccLpUDObKuwS2Zmi8LXUgFI5JpkQWCkwchCw6tgW7jyvGE=
</HostId>
</Error>'
in /home/vagrant/Code/laravel/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php:152
关于可能导致此问题的原因或我该如何继续此问题的任何想法?
【问题讨论】:
-
你用的是什么版本的 laravel?
-
5.1 - 我现在只需要了解如何调试或运行此控制台命令时有什么区别。
标签: laravel amazon-s3 beanstalkd