javascript - 如何将文件从 HTML5 拖放到 Rails 3 应用程序和回形针?

标签 javascript ruby-on-rails html drag-and-drop

我正在尝试使用 Paperclip 在 Rails 3 应用程序中获得一些 html5 拖放功能。所以,基本上:

  1. 一个或多个文件被拖放到 DIV 上
  2. 文件被 POST 到 Rails 操作(一起或一次一个)
  3. Rails 操作将每个文件保存为 Paperclip 中的新附件

现在我唯一能让它工作的方法是发送带有文件数据的 XMLHttpRequest 并让我的 Rails 操作读取 request.raw_post ...这不是一个可行的解决方案,因为我需要发送额外的 POST参数和真实性 token 。

这是我目前所拥有的:

<!-- IN MY VIEW -->
<h2>Drag and drop upload</h2>

<div id="drop">
  <h2>Drop Files Here</h2>
</div>

<script type="text/javascript" charset="utf-8">
  var dropbox = document.getElementById("drop");  
  drop = function(evt) {   
    evt.stopPropagation();
    evt.preventDefault();
    var files = evt.dataTransfer.files;
    var count = files.length;
    if (count > 0) {
        // handleFiles(files);
      var url = '/images/raw';
      var request = new XMLHttpRequest();
      request.open("POST",  url, true); // open asynchronous post request
      request.send(files[0]);
    }
  }
  dragEnter = function(evt) {
    evt.stopPropagation();
    evt.preventDefault();
  }
  dragExit = function(evt) {
    evt.stopPropagation();
    evt.preventDefault();
  }
  dragOver = function(evt) {
    evt.stopPropagation();
    evt.preventDefault();
  }
  // init event handlers
  dropbox.addEventListener("dragenter", dragEnter, false);
  dropbox.addEventListener("dragexit", dragExit, false);
  dropbox.addEventListener("dragover", dragOver, false);
  dropbox.addEventListener("drop", drop, false);
</script>

还有我的 Controller Action :

class ImagesController < ApplicationController

  # ... Normal REST actions 

  def raw
    name = "tmp_image.png"
    data = request.raw_post
    @file_content = File.open("#{Rails.root.to_s}/tmp/#{name}", "wb") do |f| 
      f.write(data)
    end
    @image = Image.new(:attachment => File.new("#{Rails.root.to_s}/tmp/#{name}"))
    @image.save
    File.unlink("#{Rails.root.to_s}/tmp/#{name}")
    render :text => 'success'    
  end
end

那么,使用附加参数将拖放文件发布到我的应用程序的正确方法是什么?

(如果有帮助,我将整个实验作为 public GitHub repo here )

最佳答案

看看

https://github.com/blueimp/jQuery-File-Upload/wiki

然后向下滚动到 Ruby (on Rails)。这可能正是您正在寻找的内容,包括有关如何将其与 Rails 3 和回形针一起使用的教程。根据我自己的经验,它就像一个魅力。

正如 Joost 评论的那样: https://github.com/yortz/carrierwave_jquery_file_upload 展示了如何将 carrierwave 与 jquery_file_upload 相结合的一个很好的例子

关于javascript - 如何将文件从 HTML5 拖放到 Rails 3 应用程序和回形针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764966/

相关文章:

html - 如何在 <a href> 标签下对齐多个图像?

javascript - 我如何在屏幕上上下移动一段文本和图像,同时保持它们并排对齐?

html - RegEx 匹配打开的标签,XHTML 自包含标签除外

ruby-on-rails - 在 Rails 应用程序中,组织非模型实用程序类的 Rails 方式是什么?

ruby-on-rails - 按日期分组日期并计算行数

javascript - 需要小代码的帮助

javascript - p5.j​​s:在 html 元素之上渲染 Canvas 而不阻止鼠标交互

ruby-on-rails - 如何在heroku上部署的Ruby on Rails 6 API后端中允许CORS

javascript - 查找日期范围内缺失日期的最有效方法是什么

javascript - 如何在 keyCode 为只读的浏览器中聚焦下一个可聚焦字段?