2010-09-21 5 views
18

Paperclip ile bir Rails 3 uygulamasında bazı html5 sürükle ve bırak işlevlerini almaya çalışıyorum. Yani, temelde:HTML5'ten dosyalar nasıl silinir RA5'e Sürükle-Bırak 3 App & Paperclip?

  1. Bir veya daha fazla dosya sürüklenip
  2. Dosyalar (bir anda birlikte veya tek) bir Raylar eylemine POST'ed olan bir DIV üzerine bırakılan
  3. Raylar eylem olarak her dosyaları kaydeder

Paperclip yeni eki Şu anda bu çalışma almak için tek yol bu ... Dosya verilerle bir XMLHttpRequest gönderme ve benim Raylar eylem request.raw_post okumak alarak çözüm olarak işe değil mi çünkü ek POST paramları ve özgünlük belirteci göndermem gerekiyor. İşte

Ben bugüne kadar ne var:

<!-- 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> 

Ve denetleyicisi eylemi: Yani

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 

, ek parametreleri içeren Uygulamama sürükle ve bırak dosyaları POST uygun yolu nedir ?

Belki bu yardımcı olabilir

+0

jquery_file_upload ile carrierwave nasıl birleştirileceğini güzel bir örneğini göstermektedir, bu @ http://marc-bowes.com/2011/08/17/ drag-n-drop-Upload.html. Çoklu (nispeten küçük) dosya yüklemeleri için çözümü uygulamak gerçekten kolaydır. – Marc

cevap

8

https://github.com/newbamboo/rack-raw-upload

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

göz at ve aşağı kaydırmak Ruby'ye (Rails üzerinde). Muhtemelen Rails 3 ve ataç ile nasıl kullanılacağı hakkında bir öğretici de dahil olmak üzere, tam olarak aradığınız şeydir. Ve kendi deneyimlerimden bir çekicilik gibi çalışır.

Ve Joost olarak

yorumladı: https://github.com/yortz/carrierwave_jquery_file_upload benim deneyim yapıyor yazdı

+2

Yukarıdaki wiki bağlantısı değişti. İşte şu anda hem carrierwave hem de DragonFly: https://github.com/blueimp/jQuery-File-Upload/wiki/Rails-setup-for-V5. Burada carrierwave için başka bir örnek: https://github.com/yortz/carrierwave_jquery_file_upload –