2011-11-08 8 views
5

Próbuję obecnie wysyłać wiele plików poza moją aplikację przy użyciu metody Rails send_file. Pętla przechodzi przez wszystkie pliki, ale wysyła tylko ostatni w katalogu. Oto mój kod.Szyny używające send_file do wysyłania wielu plików

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 

Każda pomoc jest doceniana!

Odpowiedz

1

Możesz wysłać tylko jeden plik w jednym żądaniu; jeśli chcesz wysłać wiele plików, musisz je spakować lub spakować w inny sposób.

+0

Czy mógłbyś rozwinąć trochę więcej? Jeśli chciałbym wysłać wiele plików do przeglądarki za pomocą send_data. Jak bym to zrobił? Czy spakowałbym je pojedynczo i przekazał spakowany plik do send_data? Dzięki z góry – Joel

+0

@JoelL To właśnie stwierdzam w odpowiedzi; możesz je powiązać i wysłać razem. –

4

send_file mówi kontrolerowi, że powinien odpowiedzieć na żądanie przeglądarki, wysyłając plik. - W przeciwieństwie do renderowania, wysyłania JSON itp.

W powszechnym użyciu wysyłamy dokładnie jedną odpowiedź w HTTP. (Pomijam dyskusję na temat długiego odpytywania i innych ezoterycznych typów odpowiedzi. Pomijam również odpowiedzi wieloczęściowe HTTP, które obecnie nie są ogólnie obsługiwane.)

Ponieważ możesz wysłać tylko jeden plik, spraw, aby się liczył ! Jeden plik może być plikiem zip wielu plików, ale wtedy użytkownik będzie musiał je rozpakować.

Alternatywą jest pokazanie wielu linków do pobierania na stronie internetowej, zapraszając użytkownika do pobrania po sobie, aby dokonać wielu pobrań.

Jako przykład UX (User Experience): Wyślij e-mail do siebie z wieloma załącznikami. Następnie użyj Gmaila i zobacz, jak przedstawiają wiele plików do pobrania.

+1

HTTP ma odpowiedzi wieloczęściowe, więc podczas pojedynczego żądania jest spełniona pojedyncza odpowiedź, to niekoniecznie pojedynczy dokument, który zostanie zwrócony. Obsługa przeglądarki dla wiadomości wieloczęściowych jest dość niestety niestety, ale niepoprawne jest sugerowanie, że jest to ograniczenie HTTP. – coreyward

+0

@coreyward - dobry punkt dotyczący specyfikacji protokołu. Zaktualizowałem odpowiedź. –

+0

@LarryK Jak wyświetlić wiele linków do pobierania na stronie internetowej przy użyciu send_file. Otrzymuję DoubleRenderError kiedy próbuję tego. – Joel

Powiązane problemy