2012-07-25 4 views
12

파일 업로드/다운로드가 필요한 Ruby on Rails 응용 프로그램을 개발 중입니다. 업로드 부분에 대해서는 매우 사용하기 쉽고 유연하기 때문에 보석 캐리어 웨이브를 사용했습니다. 문제는 다음과 같습니다. 일단 파일을 업로드하면 몇 가지 사항을 알아야합니다. 즉, 파일을 다운로드하는 대신 pdf이고 파일을 인라인으로 표시하고 이미지는 동일하게 표시됩니다. 어떻게하면 파일 확장자을 얻고 어떻게 할 수 있습니까? 을 사용자에게 보내시겠습니까 ?? 어떤 피드백이라도 고맙습니다 !!Carrierwave 파일 확장자를 얻는 방법

답변

30

파일 확장자를 결정합니다 (I 장착 업 로더의 이름은 '파일'가정하자) .

그리고 파일 전송 : 회신에 대한

send_file file, :type => mime, :disposition => disposition 
+0

대단히 고마워, 나는 당신의 해결책의 스타일을 좋아한다. 그리고 그것은 완벽하게 작동했다. 다시 답장을 보내 주셔서 감사합니다 !! – Wiggin

+0

정확히 레일 프로젝트 파일에서 처분 및 MIME 유형 vars를 배치하는 위치는 어디입니까? – maumercado

2

파일을 업로드하면 이름이 데이터베이스에 저장됩니다. 여기에는 확장이 포함됩니다.

파일 당신이 user.asset_url를 호출하는 경우 사용자에게 전송하기에 관해서는, 그것은 당신에게 URL을 줄 것입니다
user.asset.file.extension 

여기서 당신이 asset으로 장착 된 업 로더와 User 모델이 가정에, 당신은 그것을 얻을 수 업로드되었습니다. 사용자는 해당 링크를 사용하여 파일을 가져올 수 있습니다. 또는 "파일을 사용자에게 보내십시오"라는 의미를 오해하고 있습니까?

file = my_model.file.url 
extension = my_model.file.file.extension.downcase 

그런 다음 마임 및 폐기를 준비 바르 :

disposition = 'attachment' 
mime = MIME::Types.type_for(file).first.content_type 

if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf" 
    disposition = 'inline' 
end 

(당신이 원하는 경우 다른 확장을 추가)

+0

감사합니다! 글쎄, 나는 사용자가 파일을 다운로드하게하고 싶다. 알다시피, 대화 상자를 열지 마십시오 (.. 또는 열어 두거나 크롬 케이스에 유지 또는 거부합니다.) 매개 변수가있는 간단한 send_file을 사용하면 문제가 없을 것입니다. – Wiggin

+0

글쎄, 그냥 파일에 링크. 'user.asset_url'로 URL을 얻을 수 있습니다. –

+0

그래, 내가 그랬어! 당신의 조언은 완벽하게 일했습니다. – Wiggin

관련 문제