我用PHP编写了我的第一个在线商店。现在正在处理“添加产品”表单,我不知道如何存储图像。
我想我应该:
我用这样的列创建了表:
问题:
编辑2012-03-03: 通过重复我的意思是具有相同内容的文件(但可能是不同的名称)。
我没有使用任何框架,这将是简单轻便的在线商店。
答案 0 :(得分:1)
问题:
数目:
答案 1 :(得分:1)
首先在客户端检查文件。用这样的东西:
function (fileName) {
var ext = (-1 !== fileName.indexOf('.')) ? fileName.replace(/.*[.]/, '').toLowerCase() : '';
var allowed = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff'];
if (!allowed.length) { return true; }
for (var i = 0; i < allowed.length; i++) {
if (allowed[i].toLowerCase() == ext) { return true; }
}
return false;
}
在服务器端,检查文件类型并使用以下内容调整大小:
使用此文件名模式:
[产品编号] _ [号码] .EXT
例如:23_1.jpg和23_2.jpg(如果产品有多个图像)
使用上述模式,您不需要存储产品的图像名称。您只需拥有ProductId
即可查看产品图片答案 2 :(得分:1)
这实际上取决于您的应用程序对这些图像的作用。这些是我通过经验学到的一些东西......
有多少张图片? 如果我们谈论成千上万的图像,请记住,具有该数量文件的文件夹可能无法通过FTP访问。如果需要访问它们,可以对它们进行分类并将它们放在不同的子文件夹中。 分类可以通过许多事情来完成......从大小到奇数/偶数ID号。这一切都取决于你需要将它们分开多少。
他们是私有图片吗?他们应该公开加入吗?如果您只使用ID作为唯一标识符,则很容易猜到并找到其他图像,因为它们很可能是自动增量的。在那些只抛出用户ID,时间戳,随机数,哈希或任何组合的情况下,您可以生成更安全的名称......
哈希这些名字?你没有得到任何额外的安全保障。如果您已经使用了名称的组合,那么哈希只是一件额外的事情。假设您使用[image_id] _ [timestamp]作为名称,如果您将其哈希,则会丢失该信息。你确实在你的数据库中有它,但它在文件名中也很好。如果由于某种原因,您需要删除某些文件,那么如果您能够识别它们会更容易。并且,回到你可能拥有的图像数量...... MD5中可能存在碰撞。意思是2个文件会得到相同的名字..(这很少见,但可能会发生)
由于它是商店,我猜你不需要图像名称的额外安全性,但你可能需要额外的分类。
顺便说一句,根据您的步骤,您无法使用图像的ID作为文件名,因为您在保存图像后将行插入表中。
如果您需要更多详细信息,请发表评论。
答案 3 :(得分:1)
有没有更好的方法呢?
我最近开发了一些非常相似的东西,这个方法很适合我,但这完全取决于你的设计,目标,代码质量等。
我应该使用Images from Images表作为唯一文件名,还是继续生成唯一名称(使用PHP函数)?
我使用id作为文件名,因为它总是唯一的,这也意味着你不必将它保存到数据库中。例如;需要产品#434的图像?这是images / products / 434.jpg。
我应该生成md5哈希并将其存储在Images表中以避免/处理重复项吗? 这是一个很好的功能,但根据图像和重复的数量,我不会这样做。它为您的代码增加了不必要的复杂性,但回报很少(当你处理1mb +图像和30%重复,或者存储非常有限/昂贵时,这当然会改变)
祝你好运!