2010-12-02 43 views
0

Je n'arrive pas à faire fonctionner le module de téléchargement nginx avec l'application Rails.Module de téléchargement nginx

ma route

 match '/images/fast_upload' => 'images#create', :via => :post 

modèle d'image

attr_accessor :tmp_upload_dir 
    after_create :clean_tmp_upload_dir 


    # handle new param 
    def fast_asset=(file) 
     if file && file.respond_to?('[]') 
     self.tmp_upload_dir = "#{file['filepath']}_1" 
     tmp_file_path = "#{self.tmp_upload_dir}/#{file['original_name']}" 
     FileUtils.mkdir_p(self.tmp_upload_dir) 
     FileUtils.mv(file['filepath'], tmp_file_path) 
     self.asset = File.new(tmp_file_path) 
     end 
    end  

private 
# clean tmp directory used in handling new param 
    def clean_tmp_upload_dir 
    FileUtils.rm_r(tmp_upload_dir) if self.tmp_upload_dir && File.directory? (self.tmp_upload_dir) 
    end   

nginx.conf

upload_pass @fast_upload_endpoint; 


    upload_store /pathto/shared/uploads_tmp 1; 


    upload_store_access user:rw group:rw all:r; 


    upload_set_form_field upload[fast_asset][original_name] "$upload_file_name"; 
    upload_set_form_field upload[fast_asset][content_type] "$upload_content_type"; 
    upload_set_form_field upload[fast_asset][filepath] "$upload_tmp_path"; 

    upload_pass_form_field "^image_id$|^authenticity_token$|^format$"; 
    upload_cleanup 400 404 499 500-505; 
    } 

    location @fast_upload_endpoint { 

    passenger_enabled on; 
    rails_env production; 
    } 

    location/{ 
    rails_env production; 
    passenger_enabled on; 
    } 

Dans le contrôleur mes méthode create

def create 
    @image = current_user.images.build(params[:image]) 
    if @image.save 

Fondamentalement, je ne suis pas sûr de savoir comment obtenir cette méthode de création pour utiliser nginx à télécharger. J'ai essayé d'utiliser @image = @ resource.current_user.images.build (params [: image]) mais cela me donnait une erreur de méthode non définie.

Répondre

1

Ce que vous devez vérifier, c'est quels paramètres nginx transmet lors de la création du téléchargement. J'ai la même logique que toi. L'action de création que j'ai est la suivante. Ours avec moi parce que je ne suis pas en mesure de tester les paramètres nginx passe maintenant. Mais je pense que ce n'est pas "image" mais "upload"

@photo = @artist.photos.build(params[:upload]) 

Est ma méthode de création.