如何下载文件并将文件发送给我的用户?

时间:2013-09-20 17:50:58

标签: ruby-on-rails ruby rest-client

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

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

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

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

我想以编程方式执行相同的操作:

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

我的两个问题是:

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

    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
    

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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

我仍然无法理解的是,为什么我无法通过send_file提供来自HTTP通话的文件,但必须使用send_data