Get binary image data from input type “file” using JavaScript/jQuery for use with picture preview with AJAX in WebMatrix
我在研究或试图弄清楚如何(如果它甚至可能)从类型文件的html输入元素使用JavaScript / jQuery获取二进制图像数据时遇到了麻烦。
我正在使用WebMatrix(C#),但如果仅使用JavaScript / jQuery可以回答这个问题的目的,则可能没有必要知道。
我可以拍摄图像,将其保存在数据库中(作为二进制数据),然后在发布后从二进制数据中显示页面上的图片。然而,在上传之前,这确实让我没有图片预览,我几乎可以肯定我必须使用AJAX。
同样,这甚至可能都不可能,但只要我能获得二进制图像数据,我相信我可以用AJAX将它推送到服务器并以与从数据库中获取它时相同的方式处理图像(请注意,我不使用GUID保存图像文件,所有这些,我只保存二进制数据)。
如果有一种更简单的方法来显示使用输入元素的图片预览,那当然也可以正常工作,因为我尝试这样做的整个想法是在他们点击提交表单按钮之前显示图片预览(或至少创造这种错觉)。
********** UPDATE ***********
我不认为这是另一个问题的重复,因为,我真正的问题是:
如何使用JavaScript / jQuery从输入类型"文件"获取图像数据?
如果我可以将数据(格式正确)返回给服务器,我应该可以在那里使用它,然后用AJAX返回它(尽管,我绝对不是AJAX专家)。
根据我所做的研究,没有办法在仅使用javascript的所有IE版本中获取图片预览(这是因为他们认为获取完整文件路径是潜在的安全风险)。我可以要求我的用户将该网站添加到受信任的网站,但您通常不会要求用户篡改这些类型的设置(更不用说让您的网站对用户显得怀疑的最快方法就是直接让他们要求将您的网站添加到可信站点列表。这就像发送电子邮件并要求输入密码。"只要相信我!我太安全了!":)
简短的回答:使用jQuery表单插件,它支持类似AJAX的表单提交甚至文件上传。
TL;博士
缩略图预览是流行的网站,通常由多个步骤完成,基本上网站做这些步骤:
一些不好的解决方案是:
希望这些有帮助。 ;)
UPDATE
我实际上遇到过需要在上传之前进行预览的情况,我还想把它放在这里。我记得,现代浏览器中没有过渡版本在屏蔽真实文件路径之前没有实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // 1. Listen to change event $(':file').change(function() { // 2. Check if it has the FileReader class if (!this.files) { // 2.1. Old enough to assume a real path setPreview(this.value); } else { // 2.2. Read the file content. var reader = new FileReader(); reader.onload = function() { setPreview(reader.result); }; reader.readAsDataURL(); } }); function setPreview(url) { // Do preview things. $('.preview').attr('src', url); } |