gpt4 book ai didi

ruby-on-rails - 将文件作为 multipart/form-data 发布到 Rails API

转载 作者:行者123 更新时间:2023-12-03 16:14:57 25 4
gpt4 key购买 nike

RoR 菜鸟在这里... :)

我需要创建一个 Rails API,客户端可以通过 POST 请求调用和发送 XML 文件。

我已经像这样创建了我的路线:

  namespace :api do
namespace :v1 do
resource :report
end
end

我的 Controller 是这样的:
class Api::V1::ReportsController < ApplicationController

respond_to :xml

def create
@report_submission = ReportSubmission.create :login => params[:login],
:status => :success
respond_with(@report_submission)
end
end

我需要在 Controller 中做什么才能接收客户端将发布的 XML 文件,然后读取内容以便最终将其放入数据库中?

我该如何测试?

我创建了一个沙盒项目来尝试这个并被卡住了......不知道下一步该怎么做。我把它推到这里:

https://github.com/claudiolassala/api-samples/

任何帮助都会很棒!
结尾

最佳答案

在做了更多的研究之后,我已经设法让它发挥作用。我已经更新 my repository在 GitHub 上提供解决方案。

主要更改是修改我的 Controller ,以便读取正在发布的文件的内容:

class Api::V1::ReportsController < ApplicationController

respond_to :xml

def create

@report_submission = ReportSubmission.create :login => params[:login],
:status => :success,
:results => read_file_data(params[:reportxml])
respond_with(@report_submission)
end

private
def read_file_data(file)
xml_contents = ""
if file.respond_to?(:read)
xml_contents = file.read
elsif file.respond_to?(:path)
xml_contents = File.read(file.path)
else
logger.error "Bad file_data: #{file.class.name}: #{file.inspect}"
end
xml_contents
end
end

我已经修复了执行帖子的 Cucumber 步骤,将其更改为:
When /^I send a POST request containing the file$/ do
@login = "some-login"
@file_path = "#{::Rails.root.to_s}/features/step_definitions/test_report.xml"

post "api/v1/report.xml?login=#{@login}",
:reportxml => Rack::Test::UploadedFile.new(@file_path, 'text/xml')
end

请让我知道是否有更好的方法来做到这一点。谢谢!

关于ruby-on-rails - 将文件作为 multipart/form-data 发布到 Rails API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6798354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com