首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成亚马逊网络服务S3 PhPdolphin

集成亚马逊网络服务S3 PhPdolphin
EN

Stack Overflow用户
提问于 2015-07-17 13:53:57
回答 1查看 117关注 0票数 0

所以我的目标是实现亚马逊S3图片上传到PhPDolphin脚本,不幸的是,我遇到了一些问题,如果我在脚本中添加代码就无法加载,并且由于脚本没有错误日志,我不知道哪里出了问题,由于许可原因,我无法在此处发布整个脚本,但我会发布受影响区域的片段。

/includes/classes.php Default (只是此文件中4000行代码的一小部分)

代码语言:javascript
复制
function validateMessage($message, $image, $type, $value, $privacy) {
    // If message is longer than admitted
    if(strlen($message) > $this->message_length) {
        $error = array('message_too_long', $this->message_length);
    }
    // Define the switch variable
    $x = 0;
    if($image['name'][0]) {
        // Set the variable value to 1 if at least one image name exists
        $x = 1;
    }
    if($x == 1) {
        // If the user selects more images than allowed
        if(count($image['name']) > $this->max_images) {
            $error = array('too_many_images', count($image['name']), $this->max_images);
        } else {
            // Define the array which holds the value names
            $value = array();
            $tmp_value = array();
            foreach($image['error'] as $key => $err) {
                $allowedExt = explode(',', $this->image_format);
                $ext = pathinfo($image['name'][$key], PATHINFO_EXTENSION);
                if(!empty($image['size'][$key]) && $image['size'][$key] > $this->max_size) {
                    $error = array('file_too_big', fsize($this->max_size), $image['name'][$key]); // Error Code #004
                    break;
                } elseif(!empty($ext) && !in_array(strtolower($ext), $allowedExt)) {
                    $error = array('format_not_exist', $this->image_format, $image['name'][$key]); // Error Code #005
                    break;
                } else {
                    if(isset($image['name'][$key]) && $image['name'][$key] !== '' && $image['size'][$key] > 0) {
                        $rand = mt_rand();
                        $tmp_name = $image['tmp_name'][$key];
                        $name = pathinfo($image['name'][$key], PATHINFO_FILENAME);
                        $fullname = $image['name'][$key];
                        $size = $image['size'][$key];
                        $ext = pathinfo($image['name'][$key], PATHINFO_EXTENSION);
                        // $finalName = str_replace(',', '', $rand.'.'.$this->db->real_escape_string($name).'.'.$this->db->real_escape_string($ext));
                        $finalName = mt_rand().'_'.mt_rand().'_'.mt_rand().'.'.$this->db->real_escape_string($ext);

                        // Define the type for picture
                        $type = 'picture';

                        // Store the values into arrays
                        $tmp_value[] = $tmp_name;
                        $value[] = $finalName;

                        // Fix the image orientation if possible
                        imageOrientation($tmp_name);
                    }
                }
            }
            if(empty($error)) {
                foreach($value as $key => $finalName) {
                    move_uploaded_file($tmp_value[$key], '../uploads/media/'.$finalName);
                }
            }
            // Implode the values
            $value = implode(',', $value);
        }

然后是我编辑过的版本,它应该会自动将图片上传到亚马逊S3。

/includes/classes.php edited

代码语言:javascript
复制
function validateMessage($message, $image, $type, $value, $privacy) {
    // If message is longer than admitted
    if(strlen($message) > $this->message_length) {
        $error = array('message_too_long', $this->message_length);
    }
    // Define the switch variable
    $x = 0;
    if($image['name'][0]) {
        // Set the variable value to 1 if at least one image name exists
        $x = 1;
    }
    if($x == 1) {
        // If the user selects more images than allowed
        if(count($image['name']) > $this->max_images) {
            $error = array('too_many_images', count($image['name']), $this->max_images);
        } else {
            // Define the array which holds the value names
            $value = array();
            $tmp_value = array();
            foreach($image['error'] as $key => $err) {
                $allowedExt = explode(',', $this->image_format);
                $ext = pathinfo($image['name'][$key], PATHINFO_EXTENSION);
                if(!empty($image['size'][$key]) && $image['size'][$key] > $this->max_size) {
                    $error = array('file_too_big', fsize($this->max_size), $image['name'][$key]); // Error Code #004
                    break;
                } elseif(!empty($ext) && !in_array(strtolower($ext), $allowedExt)) {
                    $error = array('format_not_exist', $this->image_format, $image['name'][$key]); // Error Code #005
                    break;
                } else {
                    if(isset($image['name'][$key]) && $image['name'][$key] !== '' && $image['size'][$key] > 0) {
                        $rand = mt_rand();
                        $tmp_name = $image['tmp_name'][$key];
                        $name = pathinfo($image['name'][$key], PATHINFO_FILENAME);
                        $fullname = $image['name'][$key];
                        $size = $image['size'][$key];
                        $ext = pathinfo($image['name'][$key], PATHINFO_EXTENSION);
                        // $finalName = str_replace(',', '', $rand.'.'.$this->db->real_escape_string($name).'.'.$this->db->real_escape_string($ext));
                        $finalName = mt_rand().'_'.mt_rand().'_'.mt_rand().'.'.$this->db->real_escape_string($ext);

                        // Define the type for picture
                        $type = 'picture';

                        // Store the values into arrays
                        $tmp_value[] = $tmp_name;
                        $value[] = $finalName;

                        // Fix the image orientation if possible
                        imageOrientation($tmp_name);
                    }
                }
            }
            if(empty($error)) {


                foreach($value as $key => $finalName) {
                if (!class_exists('S3'))require_once('S3.php');

                //AWS access info
                if (!defined('awsAccessKey')) define('awsAccessKey', 'myaccesskey');
                if (!defined('awsSecretKey')) define('awsSecretKey', 'mysecretkey');


                //instantiate the class
                $s3 = new S3(awsAccessKey, awsSecretKey);
                    S3::outObject(
                    '$tmp_value[$key]',
                    'zepstrca',
                    '.$finalName);',
                    S3::ACL_PUBLIC_READ
                    array(),
                    array(),
                    S3::STORAGE_CLASS_STANDARD
                    );

            }
            // Implode the values
            $value = implode(',', $value);
        }

是的,我确实添加了自己的访问权限和密钥:)

任何帮助都将非常感谢,并将记入帐上!

指向此中使用的产品和API的链接:

[PhPDolphin] [S3.php API on Github]

EN

回答 1

Stack Overflow用户

发布于 2015-07-17 14:53:45

这就是你使用我正在使用的库的方法,我希望它能解决你的问题(确保存储桶上的文件夹确实存在,否则就上传一些东西到存储桶的根目录)

代码语言:javascript
复制
require_once 'S3.php'; 
$s3 = new S3(awsAccessKey, awsSecretKey);
$s3->putObjectFile('/folderOnServer/picture.jpg', awsBucket, '/folderOnBucket/newName.jpg');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31469175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档