Carrierwave + Plupload + html5 - uploadowanie plików - HOW TO

Hej od jakiegoś czasu z niepowodzeniem próbuje jakos bez powodzenia uruchomic uplowadowanie wielu plików na serwer
Testowa aplikacja stoi na rails 3.1 z carrierwave i mini_magick.

KONFIGURACJA

Baza danych:

create_table “images”, :force => true do |t|
t.integer “project_id”
t.string “file”
t.datetime “created_at”
t.datetime “updated_at”
end

create_table “projects”, :force => true do |t|
t.string “name”
t.datetime “created_at”
t.datetime “updated_at”
end

class Project < ActiveRecord::Base
has_many :images, :dependent => :destroy
accepts_nested_attributes_for :images, :allow_destroy => true
end

class Image < ActiveRecord::Base
attr_accessible :project_id, :file, :images_attributes
belongs_to :project
mount_uploader :file, ImageUploader
end

images_controller.rb
#probowalem roznych opcji zadna nie nie przyniosla rezultatu
jak podstawiam przykladowe dane 1 i dupa to tylko project_id skutkuje zapise do bazy :frowning:

def create

  @image = Image.new(:image => params[:file])
   @image.project_id = "1"
   @image.file = "dupa"
   @image.save!  
   render :nothing => true     
 end

DZIALA POPRAWNIE - BEZ PLUPLOAD

O tyle o ile uploadowanie dziala ok jezeli skorzystam z formularza edycji poniżej :

#views/project/_form.html.erb

<%= form_for(@project) do |f| %>
<% if @project.errors.any? %>

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.fields_for :images do |image| %>

<%= image.file_field :file %>
<% end %>

<% end %>

project_controller.rb

def new
@project = Project.new
3.times {@project.images.build}
end

przykladowy log z poprawnym zapisem do bazy i uploadem obrazka

Started POST “/projects” for 127.0.0.1 at 2011-05-26 12:47:04 +0100
Processing by ProjectsController#create as HTML
Parameters: {“utf8”=>“✓”, “authenticity_token”=>“oqHpPUJzd8fWR4PnKM1W2Upa4YEC2DQYaDoUqsUDqTo=”, “project”=>{“name”=>“dddffrr”, “images_attributes”=>{“0”=>{“file”=>#<ActionDispatch::Http::UploadedFile:0x00000102155088 @original_filename=“1.jpg”, @content_type=“image/jpeg”, @headers=“Content-Disposition: form-data; name=“project[images_attributes][0][file]”; filename=“1.jpg”\r\nContent-Type: image/jpeg\r\n”, @tempfile=#<File:/var/folders/Zj/ZjFPRSOdGXWm-oet-uE9O++++TI/-Tmp-/RackMultipart20110526-2259-1a80qp3>>}}}, “commit”=>“Create Project”}
SQL (0.7ms) INSERT INTO “projects” (“created_at”, “name”, “updated_at”) VALUES (?, ?, ?) [[“created_at”, Thu, 26 May 2011 11:47:05 UTC +00:00], [“name”, “dddffrr”], [“updated_at”, Thu, 26 May 2011 11:47:05 UTC +00:00]]
SQL (0.2ms) INSERT INTO “images” (“created_at”, “file”, “project_id”, “updated_at”) VALUES (?, ?, ?, ?) [[“created_at”, Thu, 26 May 2011 11:47:05 UTC +00:00], [“file”, “1.jpg”], [“project_id”, 23], [“updated_at”, Thu, 26 May 2011 11:47:05 UTC +00:00]]
Redirected to http://localhost:3000/projects/23
Completed 302 Found in 990ms


NIE DZIALA POPRAWNIE

W tym przypadku po wyborze runtime html5 - innych jeszcze nie testowalem zaznaczam kilka obrazkow i wcisakm upload :
java script zwraca :
File: 1.jpg (72 KB) 100%
File: 2.jpg (60 KB) 100%
File: 3.jpg (94 KB) 100%

W logach :

Started POST “/images” for 127.0.0.1 at 2011-05-26 13:16:40 +0100
Processing by ImagesController#create as HTML
Parameters: {“name”=>“1.jpg”, “authenticity_token”=>“oqHpPUJzd8fWR4PnKM1W2Upa4YEC2DQYaDoUqsUDqTo=”, “file”=>#<ActionDispatch::Http::UploadedFile:0x00000101f7b370 @original_filename=“1.jpg”, @content_type=“image/jpeg”, @headers=“Content-Disposition: form-data; name=“file”; filename=“1.jpg”\r\nContent-Type: image/jpeg\r\n”, @tempfile=#<File:/var/folders/Zj/ZjFPRSOdGXWm-oet-uE9O++++TI/-Tmp-/RackMultipart20110526-2259-4my3bo>>}
WARNING: Can’t mass-assign protected attributes: image
SQL (9.0ms) INSERT INTO “images” (“created_at”, “file”, “project_id”, “updated_at”) VALUES (?, ?, ?, ?) [[“created_at”, Thu, 26 May 2011 12:16:40 UTC +00:00], [“file”, nil], [“project_id”, 1], [“updated_at”, Thu, 26 May 2011 12:16:40 UTC +00:00]]
Rendered text template (0.0ms)
Completed 200 OK in 18ms (Views: 1.0ms | ActiveRecord: 9.3ms)

Started POST “/images” for 127.0.0.1 at 2011-05-26 13:16:40 +0100
Processing by ImagesController#create as HTML
Parameters: {“name”=>“2.jpg”, “authenticity_token”=>“oqHpPUJzd8fWR4PnKM1W2Upa4YEC2DQYaDoUqsUDqTo=”, “file”=>#<ActionDispatch::Http::UploadedFile:0x00000104444120 @original_filename=“2.jpg”, @content_type=“image/jpeg”, @headers=“Content-Disposition: form-data; name=“file”; filename=“2.jpg”\r\nContent-Type: image/jpeg\r\n”, @tempfile=#<File:/var/folders/Zj/ZjFPRSOdGXWm-oet-uE9O++++TI/-Tmp-/RackMultipart20110526-2259-1q50sld>>}
WARNING: Can’t mass-assign protected attributes: image
SQL (0.6ms) INSERT INTO “images” (“created_at”, “file”, “project_id”, “updated_at”) VALUES (?, ?, ?, ?) [[“created_at”, Thu, 26 May 2011 12:16:40 UTC +00:00], [“file”, nil], [“project_id”, 1], [“updated_at”, Thu, 26 May 2011 12:16:40 UTC +00:00]]
Rendered text template (0.0ms)
Completed 200 OK in 12ms (Views: 0.9ms | ActiveRecord: 0.9ms)

Started POST “/images” for 127.0.0.1 at 2011-05-26 13:16:40 +0100
Processing by ImagesController#create as HTML
Parameters: {“name”=>“3.jpg”, “authenticity_token”=>“oqHpPUJzd8fWR4PnKM1W2Upa4YEC2DQYaDoUqsUDqTo=”, “file”=>#<ActionDispatch::Http::UploadedFile:0x00000104501450 @original_filename=“3.jpg”, @content_type=“image/jpeg”, @headers=“Content-Disposition: form-data; name=“file”; filename=“3.jpg”\r\nContent-Type: image/jpeg\r\n”, @tempfile=#<File:/var/folders/Zj/ZjFPRSOdGXWm-oet-uE9O++++TI/-Tmp-/RackMultipart20110526-2259-16h393d>>}
WARNING: Can’t mass-assign protected attributes: image
SQL (0.6ms) INSERT INTO “images” (“created_at”, “file”, “project_id”, “updated_at”) VALUES (?, ?, ?, ?) [[“created_at”, Thu, 26 May 2011 12:16:40 UTC +00:00], [“file”, nil], [“project_id”, 1], [“updated_at”, Thu, 26 May 2011 12:16:40 UTC +00:00]]
Rendered text template (0.0ms)
Completed 200 OK in 12ms (Views: 0.9ms | ActiveRecord: 0.9ms)

Po zapisaniu zapisaniu projectu logi pokazuja :

Started POST “/projects” for 127.0.0.1 at 2011-05-26 13:21:27 +0100
Processing by ProjectsController#create as HTML
Parameters: {“utf8”=>“✓”, “authenticity_token”=>“oqHpPUJzd8fWR4PnKM1W2Upa4YEC2DQYaDoUqsUDqTo=”, “project”=>{“name”=>“Testowy projekt”}, “commit”=>“Create Project”}
SQL (0.5ms) INSERT INTO “projects” (“created_at”, “name”, “updated_at”) VALUES (?, ?, ?) [[“created_at”, Thu, 26 May 2011 12:21:27 UTC +00:00], [“name”, “Testowy projekt”], [“updated_at”, Thu, 26 May 2011 12:21:27 UTC +00:00]]
Redirected to http://localhost:3000/projects/24
Completed 302 Found in 10ms

  • hym brak zapisu lub updatu plików images jak widac z logów

HEJ CZY WIECIE MOZE JAK TO ROZKMINIC I CO ROBIE ZLE ? Jestem poczaątkujący w ruby wiem … jakies 3 mc ale zupelnie zglupialem. z logow wynika ze po zaznaczeniu plikow i wybraniu upload pliki sa wysylane na serwer do ktatalogu temp i jednoczesnie zapisywane w bazie danch niepelna informacje dla kazdego obrazka z kad ma se plupload wziac project_id skoro jeszcze na tym etapie formularza go nie ma ?, filename jest ale jakos nie kce sie wogole do bazy zapisac . Czy jest jakis inny sposób POMORZCIE PLEASE - bo spac po nocach nie moge

Pozdr

Kuba

Hej himmelbub,

Nie zaglębiałem się w przykład, ale w logach masz “WARNING: Can’t mass-assign protected attributes: image”, może tutaj leży problem? Próbujesz przekazać atrybut przez mass-assignment, mimo że jest on chroniony. Poczytaj o attr_accessible.

Przeczytaj mój wpis na blogu dotyczący Plupload i Rails 3.0 - http://planetrails.com/plupload-with-rails-3

Możesz przetestować też przykładową aplikację, którą udostępniłem na githubie - https://github.com/smoku/plupload_rails_example
Co prawda aplikacja działa z paperclipem, ale zmienienie tego to raczej nie problem. Jeżeli mimo to nadal będziesz miał problemy chętnie pomogę

Pozdrawiam

Hej

Dzięki za info sklonowalem twój przykład śmiga Ok. Chciałem zrobic to samo tylko w prostrzej wersji bez wykorzystywania middleware zgodnie z tym tutorialem : http://neovintage.blogspot.com/2010/06/file-uploads-with-rails-3-plupload-and.html . W sumie po częsci udalo mi sie to osiągnąc i obrazki się ładują, Mam 2 Modele ( Projects i Images - belongs_to :project ) I jedynie mam problem z przekazywaniem Id w images_controller.rb. Nie zapisje mi project_id chociaż przy zapisie poszczególnych obrazków

def create
@image = Image.new(params[:image])
@image.project_id = “26” ( Nie wiem co tutaj wpisac ) @project.id, @image.project.id, @project(params[:id]) - NIE DZIALAJĄ
@image.file = params[:file]
@image.save!
render :nothing => true
end

Chyba że o czymś jeszcze zapomnialem w modelach ? :