Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确地将base64处理为存储的服务器映像_Javascript_Php_Jquery_Html - Fatal编程技术网

Javascript 如何正确地将base64处理为存储的服务器映像

Javascript 如何正确地将base64处理为存储的服务器映像,javascript,php,jquery,html,Javascript,Php,Jquery,Html,我正在为一个基本的网店制作一个添加商品页面,店主可以通过拖放或直接浏览来添加商品图片。选择图像后,我将base64存储在一个数组中。我现在不太确定如何最好地处理这些物品图片的发送/存储,以便正确使用。在给谷歌一点爱之后,我认为图像数据可以作为base64发送,并通过类似于file_put_contents('/item images/randomNumber.jpg',base64_decode($base64))的方式保存回图像然后将项目的图像路径添加到其数据库数据中,以供以后检索。下面是一个

我正在为一个基本的网店制作一个添加商品页面,店主可以通过拖放或直接浏览来添加商品图片。选择图像后,我将base64存储在一个数组中。我现在不太确定如何最好地处理这些物品图片的发送/存储,以便正确使用。在给谷歌一点爱之后,我认为图像数据可以作为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;
});

非常感谢您的帮助,我对web开发还比较陌生。

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

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

第二,正如@Popleak所提到的,从长远来看,使用
随机数可能是不够的。使用数据库主键或
tempnam
函数族生成唯一标识符。然而,我不同意@popnoodleson的实现:很有可能通过两个不同的人上传相同的文件。例如,我在SO上的c2013冬季狂欢节头像是从一个在线互联网图书馆中拍摄的。其他人也可以使用相同的图标。我们会发生冲突,因此MD5通常是不够的,但在您的用例中可能是不够的


最后,您可能希望对base64进行解码,但请考虑是否需要它。您可以使用数据/url并内联base64图像数据。这与以前的网络问题相同:发送它需要更多的传输。但是,数据URL对于许多非常小的图像(例如化身)或将被缓存很长时间的页面(尤其是如果您的用户有合理的数据连接)非常有效。总结:在假定您需要Base64解码之前,考虑用例。 除了“randomNumber.jpg”之外,您的建议完全正确,因为一个随机数可能等于另一个随机数。创建唯一文件名同时防止图像重复的一个好方法是使用文件内容的md5哈希作为文件名。md5散列不太可能与另一个图像的散列相同。好吧,超级,我只是不确定这样通过$.post()发布潜在的大量数据是否正确。我没有回答这一点上的问题。你可能想更具体地问这个问题,以得到正确的答案。看看你怎么样。