Загрузка нескольких файлов в одном запросе

мне нужно создать сообщение, где я могу загрузить несколько файлов в одном запросе, но я не знаю, как написать это с grape. Прямо сейчас, чтобы загрузить только один файл, это то, что я делаю, и он работает нормально:

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

Суэггер показывает мне это:

enter image description here

Я думал сделать что-то вроде этого:

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

но это не очень хорошо:

enter image description here

также я пробовал:

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

не хороший результат.

enter image description here

каков правильный способ справиться с этим?

1 ответов


после некоторого тестирования я нашел ответ, я оставлю его здесь:

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

вы не можете проверить это с помощью swagger (или, по крайней мере, я не нашел способ сделать это), но вы можете использовать этот завиток:

curl -v -F "first_name=John" -F "last_name=McTest"  -F "attachments[][file]=@first_picture.png" -F "attachments[][file]=@second_picture.jpg" http://url/api/users