3
我使用s3库的codeingiter,一切工作正常,单个文件上传,但是当我尝试上传多张照片及其缩略图时,它挂在第二个putObject(第一个缩略图第一个文件)上传多个文件到亚马逊s3失败
的代码是这样的:
function photosAddAction()
{
$files = array();
$files_data = $_FILES["uploads"];
if (is_array($files_data["name"]))
{
//This is the problem
for ($i = 0; $i < count($files_data['name']); ++$i)
{
$files[] = array(
'name' => $files_data['name'][$i],
'tmp_name' => $files_data['tmp_name'][$i],
);
}
}
else
{
$files[] = $files_data;
}
foreach ($files as $file)
{
//prepare data
$chars = 'abcdefghijklmnopqrstuvwxyz';
$rand = substr(str_shuffle($chars), 0, 6);
//prepare file info
$file['tempDir'] = sys_get_temp_dir();
$file['targetFile'] = $this->uri->segment(2).'_'.time().'_'.$rand;
$file['extension'] = pathinfo($file['name'], PATHINFO_EXTENSION);
//upload original
$this->load->library('s3');
$this->s3->putObject($this->s3->inputFile($file['tmp_name'], false), 'mybucket', 'images/'.$file['targetFile'].'.'.$file['extension'], S3::ACL_PUBLIC_READ);
//create and upload thumbnails
$this->create_thumbnail(array('width' => 800, 'height' => 800, 'file' => $file));
$this->create_thumbnail(array('width' => 100, 'height' => 100, 'file' => $file));
}
function create_thumbnail($data)
{
log_message('info', 'create thumb called');
$new_image ='t'.$data['width'].'x'.$data['height'].'_'.$data['file']['targetFile'].'.'.$data['file']['extension'];
//resize config
$config['image_library'] = 'gd2';
$config['source_image']= $data['file']['tmp_name'];
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = $data['width'];
$config['height'] = $data['height'];
//resize image
$this->load->library('image_lib');
log_message('info', 'image_lib');
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->load->library('s3');
//upload image
log_message('info', 'put');
$putCommand = $this->s3->putObject($this->s3->inputFile($config['source_image'], false), 'mybucket', 'images/'.$new_image, S3::ACL_PUBLIC_READ);
if($putCommand)
{
log_message('info', $data['width'].'x'.$data['height'].' uploaded');
log_message('info', $putCommand->getRequest()->getUrl());
}
else
{
log_message('error', $data['width'].'x'.$data['height'].' upload FAILED');
}
log_message('info', 'put done');
$this->image_lib->clear();
}
最后的日志条目:
DEBUG - 2013-06-12 20:10:33 --> Model Class Initialized
DEBUG - 2013-06-12 20:10:33 --> Controller Class Initialized
DEBUG - 2013-06-12 20:10:33 --> Image Lib Class Initialized
INFO - 2013-06-12 20:10:40 --> create thumb called
INFO - 2013-06-12 20:10:40 --> image_lib
INFO - 2013-06-12 20:10:41 --> put
任何人都可以直接我在正确的方向?
感谢
FIXED: 问题显然是站在我这一边。如果您尝试多次再次上传同一文件,则会崩溃。通过codeigniter,我创建了一个新的临时文件,其中包含调整大小的图像并上传该文件。如果您尝试上载被覆盖/调整大小的图像,则不起作用 希望这有助于 – gavu