方法上传图像并将其存储在数据库中


Method to upload and store images in db

我正在创建一个数据库,它基本上处理音乐专辑的艺术作品及其不同的大小。相册艺术作品包括缩略图、主封面图像、缩放图像和其他类型的图像。根据相簿的格式,大小比方面有所不同。因此,CD相册的缩略图可能是50px乘50px,但对于CASSETTE,它可能是35px乘50px。。。

即:

  • CD将包含封面艺术作品(类型),有3种或更多尺寸(拇指、主屏幕、缩放等)

  • CD还将包含3种或更多尺寸(拇指、主、缩放等)的镶嵌CD艺术作品(类型)

在网上搜索,似乎有不同的方法来实现这一点。

方法1:

  • 有一个带有输入字段的表单来输入数据
  • 有一个上传输入字段来上传一个图像(高质量的图像…让我们称之为imageX),该图像将用于创建不同的大小
  • 验证imageX是否可接受(大小、类型等)
  • 当场创建不同的大小,并在数据库中为创建的每个大小添加一条记录。每个记录都包含大小(宽度和高度)和文件名

数据库模型:

artworktype 
========== 
artworktype_id, artworktype
artworksize 
========== 
artworksize_id, artworksize 
artwork 
========== 
artwork_id, album_id, artworktype_id, artworksize_id, filename, filenamewidth, filenameheight 

优点:

包括宽度和高度(无需启动PHP的imagegetsize来获取大小)

缺点:

冗余数据?

方法2:

  • 有一个带有输入字段的表单来输入数据
  • 有一个上传输入字段来上传一个图像(高质量的图像…让我们称之为imageX),该图像将用于创建不同的大小
  • 验证imageX是否可接受(大小、类型等)
  • 当场创建不同大小的文件,并相应地将它们移动到文件系统中(命名约定待定)
  • 在数据库中只为上传的文件创建一条记录
  • 让PHP确定大小,并使用名称约定获得其他大小

数据库模型:

artworktype 
========== 
artworktype_id, artworktype
artwork 
========== 
artwork_id, album_id, artworktype_id, filename

优点:

无冗余

缺点:

需要PHP的getimagesize函数来获取大小。对于图像来说,这是可以接受的。但是,对于许多图像(比如一批缩略图)来说,这可能会给服务器带来压力。

有标准可以实现这一点吗?其他人是怎么做的?有什么意见吗?

编辑:我不喜欢数据库中的二进制数据。。。所以这个选项是不可能的。。。

为此使用blob。我也做过类似的申请。查看我的代码:

PHP代码:

$fp = fopen($_FILES['image']['tmp_name'], 'r');
$data = fread($fp, filesize($_FILES['image']['tmp_name']));
$data = addslashes($data);
$type = $_FILES['image']['type'];
fclose($fp);
if(mysql_query("UPDATE `entries` SET `phblob` = '$data', `phtype` = '$type' WHERE `id` = '" . $_GET['id'] . "'"))
    $uploaded = true;

数据库转储将是:

+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| id     | int(11)       | NO   | PRI | NULL    | auto_increment |
| name   | varchar(255)  | NO   |     | NULL    |                |
| phblob | longblob      | YES  |     | NULL    |                |
| phtype | varchar(64)   | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+

HTML代码:

<form method="post" enctype="multipart/form-data">
    <input name="image" accept="image/jpeg, image/png, image/gif" type="file">
    <input value="Submit" type="submit">
</form>