我需要创建一个POST,可以在同一请求中上传多个文件,但是我不知道如何用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

昂首阔步地向我展示了这个:

我正在考虑做这样的事情:
desc 'Creates a new attachment.'
params do
  requires :file, :type => Array[Rack::Multipart::UploadedFile], :desc => "Attachment File."
end

但这看起来并不好:

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

也不是一个好结果。

什么是正确的处理方式?

最佳答案

经过一些测试,我找到了答案,我将其留在这里:

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:
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

10-04 22:26
查看更多