2012-11-17 5 views
0

J'utilise ce file uploader example for Ruby on Rail.Ruby On Rails: télécharger un fichier dans un dossier spécifique

Maintenant, les fichiers sont enregistrés par leur ID dans: public->system->uploads->uploads->000->000.

J'ai besoin d'être sauvé dans un tel système de dossiers: public->system->Files->Types(JPG OR PDF) Les fichiers doivent être sauvegardés non en fonction de leurs papiers d'identité, mais en fonction de leurs types.

Exemple:

Tous les fichiers jpg doivent être enregistrés dans: public->system->Files->JPG

Tous les fichiers PDF doivent être enregistrés dans: public->system->Files->PDF

Je l'ai déjà créé les dossiers, j'ai besoin que de spécifier un chemin où les fichiers doivent être sauvegardés.

C'est un code de uploads_controller.rb

def create 
    p_attr=params[:upload] 
    p_attr[:upload] = params[:upload][:upload].first if params[:upload][:upload].class == Array 
    @upload = Upload.new(p_attr) 

    respond_to do |format| 
     if @upload.save 
     format.html { 
      render :json => [@upload.to_jq_upload].to_json, 
      :content_type => 'text/html', 
      :layout => false 
     } 

     format.json { render json: [@upload.to_jq_upload].to_json, status: :created, location: @upload } 
     else 
     format.html { render action: "new" } 


     format.json{ render json: {name:(@upload.upload_file_name).split(".").first ,error: @upload.errors.messages[:upload_file_name]}, :status =>422} 

     end 
    end 
    end 

Merci à l'avance

Répondre

0

Je vous recommande de passer à carrierwave uploader. Il existe des options de configuration, qui vont vous aider à séparer les fichiers par type. Je veux dire, dans cette configuration carrierwave Uploader:

def store_dir 
    "uploads/#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"  
end 

vous pouvez modifier la partie 'model.id' avec une méthode, nommant l'image par type.

+0

Je ne voudrais pas changer. S'il y a une possibilité de le faire avec un trombone, j'aimerais le savoir. – Tonja

+0

Malheureusement, je n'ai aucune expérience avec un trombone. –

0

Vous pouvez le faire manuellement en utilisant regex. Donc, ce serait quelque chose comme:

type = p_attr.filename.match(/^*\w{3,}$/).to_s 

nom étant quel que soit son appelé au sein p_attr. Cela vous donnerait le type de fichier se terminant par une chaîne. Selon le joyau de paperclip vous pouvez définir un chemin différent et URL en les définissant comme un param:

path = "#{Rails.env}/public/system/FILE/#{type}" 
@upload = Upload.new(p.attrs, path: path, url: path) 

pas 100% sûr sur la ligne de téléchargement, mais quelque chose comme ça devrait pouvoir remplacer la valeur par défaut paperclip.

Pour plus d'informations, consultez la section paperclip readme sur le stockage. Il explique à propos du chemin par défaut de remplacement.

Questions connexes