2010-04-18 30 views
11

Tôi đang gửi tệp ms-word sử dụng đường ray. tức là khi tôi nhấp vào liên kết, tệp doc từ thư mục tmp (trong dự án) được gửi.Sử dụng send_file trong đường ray

Mã Tôi đang sử dụng là

@filename ="#{RAILS_ROOT}/tmp/test/test.doc" 
send_file(@filename , 
      :filename  => "test", 
      :type   => 'application/msword', 
      :disposition => 'attachment', 
      :streaming => 'true', 
     :buffer_size => '4096') 

Đó là làm việc, nhưng nó gửi một tập tin rỗng. Nội dung bị thiếu trong tệp. Bất kỳ đề xuất?

+1

+1. Đảm bảo bạn không gửi tệp trống. – fig

+0

Tôi không gửi tệp trống – sgi

Trả lời

14

Không có send_file: tùy chọn phát trực tuyến, đó là: luồng. Bạn đang truyền các loại tham số xấu. : buffer_size phải là số, không phải là chuỗi. : luồng phải là boolean, không phải chuỗi.

:stream => true, 
:buffer_size => 4096, 

Bạn chỉ cần tham số tên tệp (nếu bạn muốn gửi tệp có tên khác với tên gốc). Các tùy chọn khác bạn đang sử dụng là mặc định (ngoại trừ: loại).

Bạn có thể thử điều này không?

@filename ="#{RAILS_ROOT}/tmp/test/test.doc" 
send_file(@filename, :filename => "test.doc") 
0

Cố gắng gửi với: bố trí => 'inline'

send_file path, :type => 'application/msword', :disposition => 'inline' 
3

bình luận ra các dòng sau trong config/environments/production.rb

config.action_dispatch.x_sendfile_header = "X-Sendfile" 
+0

Đối với nginx, đó là 'X-Accel-Redirect'. – m33lky

+0

Ah, cảm ơn. Chúng tôi sử dụng nginx. – panzi

0
In your view => 
<%= link_to "click here to download", signed_feeds_pdf_path(:feed_image_path => feed_image.feedimage.path), target: '_self' %> 
In your controller => 
    def pdf 
    file_name = params[:feed_image_path].split('/').last 
    @filename ="#{Rails.root}/public/uploads/feed_image/feedimage/#{file_name}" 
    send_file(@filename , 
     :type => 'application/pdf/docx/html/htm/doc', 
     :disposition => 'attachment')   
    end 
Các vấn đề liên quan