2011-05-16 2 views
0

내가 생성 한 일부 CSV 데이터를 보내려면 send_file을 사용하고 있습니다.send_file 문제

file = "public/text.csv" 
File.open(file, "w"){ |f| f << "Hello World!" } 
send_file(file, :type => "text/csv; charset=utf-8") 

그러나 나는이 (그것은에 "Hello World"문자열을 가진 파일을 다운로드한다) send_file를 통해 다운로드받을 I 브라우저를 통해 열면

ÐÏࡱÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 

:

http://mydomain.com/test.csv

로 올바르게 열립니다.텍스트.

개발 중에도 문제가 없습니다. 프로덕션에서만이 파일을 사용합니다. 나는이 행동의 이유를 알 수 없지만

편집

은 나를 위해 잘 작동 send_data로 전환.

+1

HTTP 응답 헤더 ... 압축을 검사하는 경우? 암호화? 부패? –

+0

서버 쪽에서 압축하지 않습니다. send_file을 통해 많은 파일을 보내고 있습니다. 하지만 지금이. 어쩌면 그것은 단지'csv'에 관한 것일 것입니다 ... 그것을 확인하려고합니다. – fl00r

답변

2

파일을 쓰기 전용으로 여는 것처럼 보입니다. 모드를 w에서 w +로 변경해보십시오. 그래서 : File.open(file, "w"){ |f| f << "Hello World!" } to File.open(file, "w+"){ |f| f << "Hello World!" }

+0

좋은 생각이지만, 그렇지 않습니다. – fl00r

1

쓰기 모드에서 파일을 열고 파일을 보내는 중입니다. 파일이 스왑 모드에 있습니다. 내보내기를 수행하기 전에 닫아야합니다.

file = "public/text.csv" 
_file = File.open(file, "w"){ |f| f << "Hello World!" } 
_file.close() 
send_file(file, :type => "text/csv; charset=utf-8") 
+0

흥미로운 아이디어이지만 블록 실행 후 파일을 자동으로 닫아야합니다. – fl00r

0

실제로 우리는 csv 파일을 만들 필요가 없습니다. 따라서 더 우아한 해결책

data = CSV.generate do |csv| 
      csv << "Hello World" 
     end 
send_data data, 
    :type => 'text/csv; charset=iso-8859-1; header=present', 
    :disposition => "attachment; filename=text.csv"