在db中上传和存储图像的方法

时间:2012-08-31 20:47:44

标签: php mysql

我正在创建一个基本上处理音乐专辑图片及其不同尺寸的数据库。专辑图片由缩略图,主封面图像,缩放图像和其他类型的图像组成。尺寸比率方面根据相册的格式而不同。所以CD专辑的缩略图可能是50px乘50px,但对于CASSETTE来说,它可能是35px乘50px ......

即:

  • CD将包含3种或更多尺寸的封面图片(类型)(缩略图,主要,缩放等)。

  • CD还将包含3种或更多尺寸的镶嵌cd艺术品(类型)(缩略图,主要,缩放等)。

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

方法1:

  • 使用包含输入字段的表单输入数据
  • 上传输入字段以上传图片(质量好的图片......让我们称之为imageX),用于创建不同的尺寸。
  • 验证imageX是否可接受(大小,类型等)
  • 在现场创建不同的大小,并在db中为每个创建的大小添加记录。每个记录都包含大小(宽度和高度)和文件名

数据库模型:

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函数才能获得大小。对于图像,这是可以接受的。但是,对于许多图像(如一批缩略图)而言,这可能是服务器的压力。

是否有标准可以实现这一目标?其他人如何做到这一点?有什么意见吗?

EDITED : 我不是db中二进制数据的粉丝......所以这个选项不是问题......

1 个答案:

答案 0 :(得分:0)

为此使用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>