0

我正在尝试从 URL 下载文件并将其传递给我的用户。

为了使它工作,我需要构造一个 HTTP GET 请求,如下所示:

https://some.service.com/api/pdf?doc_id=99&data[info1]=some+info&data[info2]=more+info

当我在浏览器中发出它并且我得到正确的文档(包括返回的正确数据)时,这工作正常。

我想以编程方式做同样的事情:

  • 构建查询并通过 rest-client 请求文件。
  • 通过 send_file 将文件提供给用户。

我的两个问题是:

  1. 我在将参数传递给rest-client的方式上犯了一个错误,但是我没有找到检查结果查询实际上是什么的方法。这让我很难看出我做错了什么,因为我只是将结果调用与我的浏览器调用进行比较。所有参数,除了data[]那些工作正常。
  2. 我只能通过 提供正确的文档(减去正确的数据)send_data,这意味着我必须再次指定类型和文件名。这没有任何意义,因为我正在下载的 PDF 已经很好地用于命名和一切。send_file返回错误。

这是我的代码:

def request_and_send_file
  response = RestClient.get("https://some.service.com/api/pdf", :params => {
    doc_id: 99,
    :data => {
      info1: "some info",
      info2: "more info"}})
  send_data response.body, filename: "hochzeitsfeder.pdf", disposition: "attachment", :content_type => 'application/pdf'
end

任何帮助是极大的赞赏。

4

1 回答 1

2

我能够用参数解决问题。如果我这样调用,参数会起作用:

def request_and_send_file
  response = RestClient.get("https://some.service.com/api/pdf", :params => {
    doc_id: 99,
    "data[info1]" => "some info",
    "data[info2]" => "more info"})
  send_data response.body, filename: "customer.pdf", disposition: "attachment", :content_type => 'application/pdf'
end

我仍然无法弄清楚,为什么我不能提供从 HTTP 调用通过 获得的文件send_file,但必须使用send_data.

于 2013-09-20T18:13:29.383 回答