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 を介してユーザーにファイルを提供します。

私の2つの問題は次のとおりです。

  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 に答える