我正在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;
}
}
}