2011-01-13 29 views
14

Dosyaları karşıya yüklerken bir sorun yaşıyorum. Kullanıcıların sistem izin verir dosyaları ... ÖrneğinDosya uzantısını bazı dosya uzantıyla kısıtla

yüklemesine izin istiyorum, dosyaları kullanıcılar tarafından yüklenmesine .jpg * bir uzantısını sahip tanır. Yani, dosya seçim penceresinde sadece jpg uzantısına sahip dosyaları görmelidirler.

nasıl RoR olarak da dinleyebiliriz ?

cevap

8

Bu sorunun cevabı muhtemelen rayların daha html yükleme daha fazla ilgilidir: uzantılarını doğrulamak için validate_attachment_content_type yöntemi yoktur.

Eğer bir dosya yüklemek istediğinizde, genellikle type = "dosya" ile bir giriş yapmak.

Bu

file_field_tag helper kullanarak Rails yapılabilir. özniteliğine sahip olabilen type = "file" ile bir girdi oluşturacaktır, ancak bunu gerçekten kullanamazsınız çünkü gerçekten görünür bir etkisi olmayacaktır. Bu özellik, uzantıları değil MIME türlerini kabul eder ve çoğu tarayıcı bunu kullanmaz.

Yapabileceğiniz en iyi şey, muhtemelen bir javascript'in dosya uzantısını yüklemeden önce (iletişim kutusundan dosya seçtikten sonra) kontrol etmesidir. Bu konuda daha fazla bilgi edinin this question.

nokta sadece istediğiniz dosya uzantılarını göstermek için OS zorlayamaz vardır. Sen yüklemeden önce, örneğin JS kullanarak uzantısı doğrulamak veya kullanabilirsiniz HTML5 ile yüklemeden sonra dosyanın, sunucu tarafında

+1

kullanma JavaScript iyi bir fikir değil. Sunucu tarafı doğrulama ile daha iyi gidin, ör. Paperclip tarafından desteklendiği gibi. –

+3

Doğrulama için javascript kullanımını önermiyorum, ancak sadece bir formalite olarak (yani .. neden birinin yanlış bir uzantıyla bir resim yüklemesine izin verelim). Kullanıcı bir dosya yüklerse, gerekli uzantı olsa bile, sunucu tarafında kontrol edilmesi gerektiği açıktır. ama sorun bu değil. soru yüklemeden önce doğrulanabiliyor muydu (muhtemelen geçerli olmayan bir şeyi yüklemek için zaman kazanmak için. en azından ben böyle görüyorum) –

13

içeriğini kontrol edebilirsiniz ya: aynen böyle mim-tiplerini sınırlama için kabul ediyoruz:

kolayca atlatılabilir çünkü
<%= file_field_tag :csv_file, :accept => 'text/csv' %> 
+0

"csv_file?" nedir? Bu yerleşik mi? – Jubl

+1

@Jubl hayır, bu alanın adı. API'ya bakın http://apidock.com/rails/ActionView/Helpers/FormTagHelper/file_field_tag ​​ – Roger

+0

Birden fazla dosya uzantısını nasıl kabul edersiniz? – Ctpelnar1988

İlgili konular