【发布时间】:2012-04-29 05:45:18
【问题描述】:
我正在尝试将文件上传到我的 Amazon S3 存储桶。我的朋友过去曾在我们的网站上进行过这项工作,但一年后它被破坏了,我不知道出了什么问题。我们使用的是Geoff gaudreault开发的S3 PHP library。
这个库对我来说看起来很简单,实际上它看起来有一个关键功能:putObject()。
不幸的是,我什至没有走出大门。我收到以下错误消息:
Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.
这是我的上传表单action的codeigniter PHP:
function s3(){
$config['upload_path'] = $_SERVER["DOCUMENT_ROOT"].'/temp/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '1000000';
$config['max_width'] = '1024000';
$config['max_height'] = '768000';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
echo 'failure';
}
else
{
$data = array('upload_data' => $this->upload->data());
$fn = $data['file_name'];
$type = substr($fn, strrpos($fn, '.') + 1);
$this->load->library('s3');
$temp_file_path = $_SERVER["DOCUMENT_ROOT"]."/temp/" . $data['file_name'];
$contents = read_file($temp_file_path); // will this blow up or timeout for large files?!
$newFileName = uniqid().".".substr($temp_file_path, strrpos($temp_file_path, '.') + 1);
$contentPath = "mysite.com/Images";
$this->s3->putObject($newFileName, $contents, $contentPath, 'private', $type);
echo 'success';
}
}
有人有什么想法吗?
【问题讨论】:
-
嗨 Colin,我不确定如何从命令行访问我的 S3 服务器。我的 EC2 服务器 /etc/apache2/error.log 没有提到这个错误 324。想法?
-
首先要指出的是,您可以将 CodeIgniter 中的功能用于文件名/路径等。首先,您可以使用
encrypt_name选项而不是手动生成$newFileName。其次,$data['full_path']包含上传文件的完整路径,$data['file_ext']包含文件扩展名,最后,不使用$_SERVER['DOCUMENT_ROOT']你应该可以简单地使用$config['upload_path'] = './temp';上传脚本采用相对于索引的路径。 php 在你的根目录中。 HTH -
太棒了,谢谢加文!让我花几分钟时间消化一下你刚才说的话,我还是个新手....
-
嗨 Gavin,我认为错误在于我对 AWS S3.php 库的使用。我可以使用 CI 的文件上传类上传到我的服务器没有问题。只有当我向该库发出
$this->load->library('s3');和随后的putObject()调用时,事情才会爆发。
标签: php codeigniter file-upload amazon-s3