2015-03-30 52 views
5

Potrzebuję utworzyć POST, w którym mogę przesłać wiele plików w tym samym żądaniu, ale nie wiem, jak napisać to z winogron. Teraz, aby przesłać tylko jeden plik, to jest to, co robię i to działa bez zarzutu:Przesyłanie wielu plików w tym samym żądaniu

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 pokazuje mi ten:

enter image description here

Myślałam o zrobienie czegoś takiego:

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

Ale to nie wygląda dobrze:

enter image description here

również próbowałem:

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

Nie jest to dobry wynik albo.

enter image description here

Jaki jest właściwy sposób obsłużyć to?

Odpowiedz

7

Po pewnym testów znalazłem odpowiedź, będę go zostawić tutaj:

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 

Nie można przetestować to przy użyciu puszyć (a przynajmniej ja nie znalazłem sposób to zrobić), ale możesz użyć tego zawinięcia:

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