2015-03-30 2 views
5

Je dois créer un POST où je peux télécharger plusieurs fichiers dans la même requête, mais je ne sais pas comment écrire cela avec raisin. En ce moment de télécharger un seul fichier ce que je fais et cela fonctionne très bien:Chargement de plusieurs fichiers dans la même requête

desc 'Creates a new attachment.' 
params do 
    requires :file, :type => Rack::Multipart::UploadedFile, :desc => "Attachment File." 
end 
post do 
    attachment = Attachment.new 
    attachment.file = ActionDispatch::Http::UploadedFile.new(params[:file]) 
    attachment.save! 
    attachment 
end 

Swagger me montre ceci:

enter image description here

Je pensais faire quelque chose comme ceci:

desc 'Creates a new attachment.' 
params do 
    requires :file, :type => Array[Rack::Multipart::UploadedFile], :desc => "Attachment File." 
end 

Mais il ne cherche pas bien:

enter image description here

Aussi j'essayé:

params do 
    optional :attachments, type: Array do 
    requires :file, :type => Rack::Multipart::UploadedFile, :desc => "Attachment File." 
    end 
end 

Pas un bon résultat non plus.

enter image description here

Quelle est la bonne façon de gérer cela?

Répondre

7

Après quelques tests, j'ai trouvé la réponse, je vais le laisser ici:

params do 
    requires :first_name, type: String, desc: "User first name" 
    requires :last_name, type: String, allow_blank: false, desc: "User last name" 
    optional :attachments, type: Array do 
    requires :file, :type => Rack::Multipart::UploadedFile, :desc => "Profile pictures." 
    end 
end 

Vous ne pouvez pas tester cela en utilisant fanfaronnades (ou du moins je ne l'ai pas trouvé un moyen de le faire), mais vous pouvez utiliser cette boucle:

curl -v -F "first_name=John" -F "last_name=McTest" -F "attachments[][file][email protected]_picture.png" -F "attachments[][file][email protected]_picture.jpg" http://url/api/users