在提交表单之前,我需要预览一张图片。 我使用Rails 3,需要一个兼容各种浏览器的解决方案。 有什么想法如何实现呢?
在提交表单之前,我需要预览一张图片。 我使用Rails 3,需要一个兼容各种浏览器的解决方案。 有什么想法如何实现呢?
所以! :) 主要的想法是使用FileReader Javascript类,这对你需要做的事情非常方便。
你只需要监听文件输入的"change"事件,然后调用一个方法,该方法将使用FileReader类的"readAsDataURL()"方法。然后,你只需用该方法返回的结果填充“预览图像标记”的源代码即可...
我为你编写了一个简单的jsFiddle来实现你想要的功能。你可以在下面看到我的代码:
<!-- HTML Code -->
<div class="upload-preview">
<img />
</div>
<input class="file" name="logo" type="file">
//JS File
$(document).ready(function(){
var preview = $(".upload-preview img");
$(".file").change(function(event){
var input = $(event.currentTarget);
var file = input[0].files[0];
var reader = new FileReader();
reader.onload = function(e){
image_base64 = e.target.result;
preview.attr("src", image_base64);
};
reader.readAsDataURL(file);
});
});
在Mozilla文档中,您可以找到另一个例子(肯定更加健壮)。这个解决方案应该可以在Safari(6.0版本及以上)中使用。
在提交表单之前预览图像的唯一方法是我所知道的,但我认为这是一个很常见的方式。当然,这与Ruby On Rails无关,因为我们只在这里使用Javascript......仅使用Rails是不可能做到的,因为您必须上传图像才能呈现它。(由于Rails是服务器端,我想您完全理解这个原因。: )
HTML:
<input type="file">
<div id="image_preview"></div>
JS(需要jQuery):
$(document).ready(function(){
$('input[type="file"]').change(function(){
var image = window.URL.createObjectURL(this.files[0]);
$("#image_preview").css("background-image", "url(" + image + ")");
});
});