2011-11-08 37 views
5

現在、Railsのsend_fileメソッドを使用して、アプリケーションの外に複数のファイルを送信しようとしています。すべてのファイルをループしますが、最後のファイルのみをディレクトリに送ります。ここに私のコードです。複数のファイルを送信するためにsend_fileを使用するレール

Dir.foreach(@dir) do |entry| 
    if entry != "." && entry != ".." && entry != ".DS_Store" && entry != ".title" 
     send_file(@dir + entry, :disposition => 'inline') 
     logger.info("File: " + @dir + entry) 
    end 
    end 

ご協力いただきましてありがとうございます。

答えて

1

1つのリクエストで1つのファイルしか送信できません。複数のファイルを送信したい場合は、それらを圧縮したりバンドルしたりする必要があります。

+0

もう少し詳しく説明できますか? send_dataで複数のファイルをブラウザに送信したい場合それについてどうすればいいですか?個別に圧縮し、zipファイルをsend_dataに渡しますか?時間のお礼ありがとうございました – Joel

+0

@JoelLこれが私の答えです。それらをバンドルして一緒に送ることができます。 –

4

send_fileは、ブラウザにファイルを送信して応答する必要があることをコントローラに通知します。 - ビューのレンダリングとは対照的に、JSONの送信など。

通常、HTTPで1つの応答を送信します。 (私はロングポーリングやその他の難解なレスポンスの議論を省いていますが、現在は一般的にサポートされていないHTTPマルチパートレスポンスも省略しています)。 ! 1つのファイルは複数のファイルのジップですが、ユーザーはそれらを解凍する必要があります。

代わりに、複数のダウンロードリンクをWebページに表示して、複数のダウンロードを実行するためにユーザーが順番にダウンロードするように促すこともできます。

例としてUX(ユーザーエクスペリエンス):複数の添付ファイルを使用して自分宛に電子メールを送信します。その後、GMailを使って、あなたが複数のファイルをダウンロードする方法を見てください。

+1

HTTPには複数の部分からなる応答があるため、1つの要求が1つの応答で満たされていても、返される単一の文書である必要はありません。残念ながら、マルチパートメッセージのブラウザサポートはかなり悪いですが、これはHTTPの制限であることを暗示するのは間違いです。 – coreyward

+0

@coreyward - プロトコル仕様についての良い点。私は答えを更新しました。 –

+0

@LarryK send_fileを使ってウェブページに複数のダウンロードリンクを表示するには?私はそれを試みるときにDoubleRenderErrorを取得します。 – Joel

関連する問題