Gae php从云存储提供图像

时间:2016-12-15 17:20:27

标签: php google-app-engine cloud google-cloud-storage

我正在app引擎应用程序中使用 php 开发一个应用程序。这个应用程序是一个图像库。我的图像是云存储,我希望以动态方式检索它们。一般来说,我从我的应用程序上传照片到云存储,但我想把它们带回来。在我的localhost中我将我的图像名称添加到数据库中,该数据库与我本地主机中的文件相关联(典型方式)。

我如何使用云存储做类似的事情?我该如何处理这个解决方案?

谢谢!

我使用this tutorial用户上传到云端存储,this one用于提供图片。他们工作,图片在云端。 现在我想创建对云存储的查询以检索它们,例如,通过ID,按名称,全部,对它们进行排序以及关联它们

这是我在localhost中的Photo Class。     

class Photo extends Db_object {


    protected static $db_table = "photos";
    protected static $db_table_fields = array('id', 'title','caption', 'description','filename', 'alternate_text','type','size' );
    public $id;
    public $title;
    public $caption;
    public $description;
    public $alternate_text;
    public $filename;
    public $type;
    public $size;

    public $tmp_path;
    public $upload_directory = "images";
    public $errors = array();
    public $upload_errors_array = array(

    UPLOAD_ERR_OK           => "There is no error",
    UPLOAD_ERR_INI_SIZE     => "The uploaded file exceeds the upload_max_filesize directive in php.ini",
    UPLOAD_ERR_FORM_SIZE    => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
    UPLOAD_ERR_PARTIAL      => "The uploaded file was only partially uploaded.",
    UPLOAD_ERR_NO_FILE      => "No file was uploaded.",               
    UPLOAD_ERR_NO_TMP_DIR   => "Missing a temporary folder.",
    UPLOAD_ERR_CANT_WRITE   => "Failed to write file to disk.",
    UPLOAD_ERR_EXTENSION    => "A PHP extension stopped the file upload."                   


);


// This is passing $_FILES['uploaded_file'] as an argument

    public function set_file($file) { 

        if(empty($file) || !$file || !is_array($file)) {
        $this->errors[] = "There was no file uploaded here";
        return false;

        }elseif($file['error'] !=0) {

        $this->errors[] = $this->upload_errors_array[$file['error']];
        return false;

        } else {


        $this->filename =  basename($file['name']);
        $this->tmp_path = $file['tmp_name'];
        $this->type     = $file['type'];
        $this->size     = $file['size'];

        }


}


    public function picture_path() {

        return $this->upload_directory.DS.$this->filename;
    }

    public function save() {

        if($this->id) {
            $this->update();

        } else {
            if(!empty($this->errors)) {
                return false;

            }

            if(empty($this->filename) || empty($this->tmp_path)){
                $this->errors[] = "the file was not available";
                return false;
            }

            $target_path = SITE_ROOT . DS . 'admin' . DS . $this->upload_directory . DS . $this->filename;


            if(file_exists($target_path)) {
                $this->errors[] = "The file {$this->filename} already exists";
                return false;


            }

            if(move_uploaded_file($this->tmp_path, $target_path)) {

                if( $this->create()) {

                    unset($this->tmp_path);
                    return true;

                }


            } else {

                $this->errors[] = "the file directory probably does not have permission";
                return false;

            }

        }

    }

    public function delete_photo() {

        if($this->delete()) {

            $target_path = SITE_ROOT.DS. 'admin' . DS . $this->picture_path();

            return unlink($target_path) ? true : false;


        } else {

            return false;


        }

    }

        public function comments() {

        return Comment::find_the_comments($this->id);

    }


    public static function display_sidebar_data($photo_id) {


        $photo = Photo::find_by_id($photo_id);


        $output = "<a class='thumbnail' href='#'><img width='100' src='{$photo->picture_path()}' ></a> ";
        $output .= "<p>{$photo->filename}</p>";
        $output .= "<p>{$photo->type}</p>";
        $output .= "<p>{$photo->size}</p>";

        echo $output;


    }


} // End of Class 

 ?>

我的Db_object类在我的本地主机中,我使用它们和我正在搜索的类似内容!

<?php 

class Db_object {


public $errors = array();
public $upload_errors_array = array(


    UPLOAD_ERR_OK           => "There is no error",
    UPLOAD_ERR_INI_SIZE     => "The uploaded file exceeds the upload_max_filesize directive in php.ini",
    UPLOAD_ERR_FORM_SIZE    => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
    UPLOAD_ERR_PARTIAL      => "The uploaded file was only partially uploaded.",
    UPLOAD_ERR_NO_FILE      => "No file was uploaded.",               
    UPLOAD_ERR_NO_TMP_DIR   => "Missing a temporary folder.",
    UPLOAD_ERR_CANT_WRITE   => "Failed to write file to disk.",
    UPLOAD_ERR_EXTENSION    => "A PHP extension stopped the file upload."                   


);

    public function set_file($file) { 

        if(empty($file) || !$file || !is_array($file)) {
        $this->errors[] = "There was no file uploaded here";
        return false;

        }elseif($file['error'] !=0) {

        $this->errors[] = $this->upload_errors_array[$file['error']];
        return false;

        } else {


        $this->user_image =  basename($file['name']);
        $this->tmp_path = $file['tmp_name'];
        $this->type     = $file['type'];
        $this->size     = $file['size'];


        }

}

    public static function find_all() {

        return static::find_by_query("SELECT * FROM " . static::$db_table . " ");


        }


    public static function find_by_id($id) {
        global $database;
        $the_result_array = static::find_by_query("SELECT * FROM " . static::$db_table . " WHERE id = $id LIMIT 1");

        return !empty($the_result_array) ? array_shift($the_result_array) : false;


        }

    public static function find_by_query($sql) {
        global $database;
        $result_set = $database->query($sql);
        $the_object_array = array();
        while($row = mysqli_fetch_array($result_set)) {

        $the_object_array[] = static::instantation($row);

        }

        return $the_object_array;

        }


    public static function instantation($the_record){

        $calling_class = get_called_class();


        $the_object = new $calling_class;


        foreach ($the_record as $the_attribute => $value) {

        if($the_object->has_the_attribute($the_attribute)) {

            $the_object->$the_attribute = $value;


            }


        }

        return $the_object;
    } 


    private function has_the_attribute($the_attribute) {

        // $object_properties = get_object_vars($this);

        // return array_key_exists($the_attribute, $object_properties);

        return property_exists($this, $the_attribute);


    }

    protected function properties() {

        $properties = array();

        foreach (static::$db_table_fields  as $db_field) {

            if(property_exists($this, $db_field)) {

                $properties[$db_field] = $this->$db_field;

            }

        }

        return $properties;

    }

        protected function clean_properties() {
        global $database;


        $clean_properties = array();


        foreach ($this->properties() as $key => $value) {

            $clean_properties[$key] = $database->escape_string($value);


        }

        return $clean_properties ;

    }

public function save() {

    return isset($this->id) ? $this->update() : $this->create();

    }

    public function create() {
        global $database;

        $properties = $this->clean_properties();

        $sql = "INSERT INTO " . static::$db_table . "(" . implode(",", array_keys($properties)) . ")";
        $sql .= "VALUES ('". implode("','", array_values($properties)) ."')";


        if($database->query($sql)) {

            $this->id = $database->the_insert_id();

            return true;

        } else {

            return false;


        }


    } // Create Method



    public function update() {
        global $database;


        $properties = $this->clean_properties();

        $properties_pairs = array();

        foreach ($properties as $key => $value) {
            $properties_pairs[] = "{$key}='{$value}'";
        }

        $sql = "UPDATE  " .static::$db_table . "  SET ";
        $sql .= implode(", ", $properties_pairs);
        $sql .= " WHERE id= " . $database->escape_string($this->id);

        $database->query($sql);

        return (mysqli_affected_rows($database->connection) == 1) ? true : false;



    } // end of the update method




        public function delete() { 
            global $database;


            $sql = "DELETE FROM  " .static::$db_table . "  ";
            $sql .= "WHERE id=" . $database->escape_string($this->id);
            $sql .= " LIMIT 1";

            $database->query($sql);

            return (mysqli_affected_rows($database->connection) == 1) ? true : false;


        }


        public static function count_all() {

            global $database;

            $sql = "SELECT COUNT(*) FROM " . static::$db_table;
            $result_set = $database->query($sql);
            $row = mysqli_fetch_array($result_set);

            return array_shift($row);


        }


        public function delete_photo() {


        if($this->delete()) {

            $target_path = SITE_ROOT.DS. 'admin' . DS . $this->picture_path();

            return unlink($target_path) ? true : false;


        } else {

            return false;


        }




    }


}

1 个答案:

答案 0 :(得分:0)

好像你需要关注this guide并且会涉及做SQL查询以获取你在那里提供的数据。

希望有所帮助。