如何正确处理base64到存储的服务器映像

时间:2013-12-27 13:46:45

标签: javascript php jquery html

我正在为基本网上商店添加项目页面,店主可以通过拖放或直接浏览来添加项目图像。选择图像时,我将base64存储在一个数组中。我现在不太清楚如何最好地处理这些项目图像的发送/存储以便正确使用。在给予Google一点爱之后,我认为图像数据可以作为base64发送,然后通过file_put_contents('/item-images/randomNumber.jpg', base64_decode($base64));之类的东西保存回图像,然后将项目的图像路径添加到其数据库数据中供以后检索。下面是我目前想象的如何发送图像数据的一个未经测试的例子,是这样的吗?

$("#addItem").click(function() {
    var imgData = "";
    $.each(previewImagesArray, function(index, value) {
        imgData += previewImagesArray[index].value;
    });
    $.post
    (
        "/pages/add-item.php",
        "name="+$("#add-item-name").val()+
        "&price="+$("#add-item-price").val()+
        "&desc="+$("#add-item-desc").val()+
        "&category="+$("#add-item-category :selected").text()+
        "&images="+imgData
    );
    return false;
});

非常感谢任何帮助,我对网络开发相对较新。

1 个答案:

答案 0 :(得分:0)

正如您所做的那样,我本质上也是如此:从浏览器中获取base64,然后回发并存储。一些评论......

首先,HTML POST没有强制性的大小限制,但实际上你的后端将限制发布数据的大小。 (例如,PHP中的2M max_post_size。)由于您要发送base64,因此您可以显着降低可以发送的有效负载。也就是说,如果图像的每个字节等于base64的三个字节,那么每个网络字节的图像传输将会少得多。发送多个帖子或增加帖子大小以满足您的需求。

其次,正如@popnoodles所提到的,从长远来看,使用randomNumber可能是不够的。使用数据库主键或tempnam函数系列来生成唯一标识符。我不同意@popnoodleson实现,但是:很可能上传同一个文件,而不是两个不同的人。例如,我在SO上的c2013 Winter Bash头像来自在线互联网图书馆。其他人可以使用相同的图标。我们会碰撞,所以MD5一般来说还不够,但在你的使用案例中可能是。

最后,你可能想要base64解码,但要考虑一下你是否需要它。您可以使用数据/ URL并内联base64图像数据。这与以前的网络问题相同:发送它需要更多的传输。但是,数据URL非常适用于许多非常小的图像(例如头像)或将被缓存很长时间的页面(特别是如果您的用户具有合理的数据连接)。摘要:在假设您需要base64解码之前考虑用例。