如何在Ruby on Rails中使用Paperclip实时预览已上传的图像

9
基本上,我想要实现的是在用户提交之前允许他们预览已上传的图像。
在控制器中,我有:
def index
    @temp = Temp.new
end

由于@temp未保存,我仍然可以使用Rails: Paperclip & previews中的解决方案吗?如果不能,我可以运行JavaScript或其他东西来运行一些Ruby代码吗?

这是我的HTML:

= form_for @temp, :url => temp_path, :html => { :multipart => true } do |form|

   = form.file_field :image

= image_tag @temp.image.url

= image_tag @temp.image.url(:medium)

= image_tag @temp.image.url(:thumb)

3个回答

33

如果我理解正确,您想在实际上传图像之前预览图像,是这样吗? 您可以使用一些JavaScript来实现。

通过设置图像标签的宽度和高度属性,您可以模拟缩略图。

$(function() {
  $('#pictureInput').on('change', function(event) {
    var files = event.target.files;
    var image = files[0]
    var reader = new FileReader();
    reader.onload = function(file) {
      var img = new Image();
      console.log(file);
      img.src = file.target.result;
      $('#target').html(img);
    }
    reader.readAsDataURL(image);
    console.log(files);
  });
});
<form>
  <input type="file" id="pictureInput"> 
</form>
<div id="target">
</div>

你可以在CodePen 上查看它。


我真的很喜欢这个解决方案。非常轻量级且能够完成任务。感谢分享! - Carl Edwards
你能否解释一下如何将图像限制为缩略图大小? - Mirror318
我在代码笔记中添加了一段注释。基本上,您只需调用 image.size,就可以获得输入文件的字节大小。 - TimKaechele

0

不需要 jQuery。你可以在现代 JS 中完成同样的事情:

const selectElement = document.querySelector('#pictureInput');

selectElement.addEventListener('change', (event) => {
  let files = event.target.files;
  let image = files[0]
  let reader = new FileReader();
  reader.onload = function(file) {
    let img = new Image();
    console.log(file);
    img.src = file.target.result;
    let target = document.querySelector('#target')
    while (target.firstChild) {
      target.removeChild(target.firstChild);
    }
    document.querySelector('#target').appendChild(img)
  }
  reader.readAsDataURL(image);
  console.log(files);
});

0

这在我的情况下有效:

  $('.file-input').on 'change', (event) ->
    $('.image').attr('src', URL.createObjectURL(this.files[0]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接