2011-11-08 26 views
5

Tôi hiện đang cố gửi nhiều tệp bên ngoài ứng dụng của mình bằng phương thức send_file Rails. Nó lặp qua tất cả các tệp, nhưng chỉ gửi tệp cuối cùng trong thư mục. Đây là mã của tôi.Đường ray sử dụng send_file để gửi nhiều tệp

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 

Mọi trợ giúp đều được đánh giá cao!

Trả lời

1

Bạn chỉ có thể gửi một tệp trong một yêu cầu; nếu bạn muốn gửi nhiều tệp, bạn cần phải nén chúng hoặc gộp chúng lại.

+0

bạn có thể xây dựng thêm một chút không? Nếu tôi muốn gửi nhiều tệp đến trình duyệt bằng send_data. Làm thế nào tôi sẽ đi về điều đó? Tôi sẽ nén chúng riêng lẻ và vượt qua các tập tin nén để gửi_data? Cảm ơn trước thời hạn – Joel

+0

@ JoelL Đó là những gì tôi nêu trong câu trả lời; bạn có thể nhóm chúng lại và gửi chúng lại với nhau. –

4

send_file thông báo cho bộ điều khiển rằng bộ điều khiển phải phản hồi yêu cầu của trình duyệt bằng cách gửi tệp. - Trái với việc hiển thị chế độ xem, gửi JSON, v.v.

Sử dụng phổ biến, bạn gửi chính xác một phản hồi trong HTTP. (Tôi đang bỏ qua các cuộc thảo luận về các cuộc trả lời dài và các loại phản ứng bí truyền khác. Tôi cũng bỏ qua các phản hồi đa kênh HTTP thường không được hỗ trợ tại thời điểm này.)

Vì bạn chỉ có thể gửi một tệp ! Một tệp có thể là mã zip của một số tệp nhưng sau đó người dùng sẽ cần phải giải nén chúng.

Cách khác là hiển thị nhiều liên kết tải xuống trên trang web, mời người dùng tải xuống từng liên kết khác để thực hiện nhiều lần tải xuống.

Ví dụ: UX (Trải nghiệm người dùng): Gửi email cho chính bạn bằng nhiều tệp đính kèm. Sau đó sử dụng Gmail và xem cách chúng hiển thị nhiều tệp để bạn tải xuống.

+1

HTTP đã có phản hồi nhiều phần, do đó, trong khi yêu cầu duy nhất được đáp ứng với một phản hồi đơn, thì đó không nhất thiết là một tài liệu đơn lẻ được trả lại. Tuy nhiên, trình duyệt hỗ trợ cho các thông điệp nhiều phần là khá xấu, nhưng nó không chính xác để ngụ ý đây là một hạn chế của HTTP. – coreyward

+0

@coreyward - điểm tốt về thông số giao thức. Tôi đã cập nhật câu trả lời. –

+0

@LarryK bạn sẽ hiển thị nhiều liên kết tải xuống trên trang web bằng cách sử dụng send_file như thế nào. Tôi nhận được một DoubleRenderError khi tôi thử điều đó. – Joel

Các vấn đề liên quan