2015-03-30 19 views
5

Ho bisogno di creare un POST in cui posso caricare più file nella stessa richiesta, ma non so come scriverlo con uva. In questo momento di caricare solo file questo è quello che sto facendo e che sta funzionando benissimo:Caricamento di più file nella stessa richiesta

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 mi mostra questo:

enter image description here

Stavo pensando di fare qualcosa di simile:

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

Ma non sta cercando bene:

enter image description here

Inoltre ho provato:

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

Non un buon risultato sia.

enter image description here

Qual è il modo giusto di gestire questo?

risposta

7

Dopo alcuni test ho trovato la risposta, lascio qui:

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 

Non è possibile verificare questo utilizzando spavalderia (o almeno non ho trovato il modo di farlo), ma puoi usare questo ricciolo:

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