Witam
Chciałem napisać coś prostego do obsługi plików, bez używania pluginu ponieważ chciałbym się czegoś nauczyć.
Pliki są przechowywane na dysku, natomiast w w bazie mam nazwę pliku (doc:string).
Jak do tej pory mam coś takiego:
##VIEW
<%= file_field "offer", "uploaded_doc" %>
##MODEL - offer.rb
[code]def uploaded_doc=(doc_field)
if doc_field.size > 0
Sanitize
sanitized_file = sanitize_filename(doc_field.original_filename)
self.doc = sanitized_file
Copy file
File.open(“public/docs/offers/#{sanitized_file}”, “w”) { |f| f.write(doc_field.read)}
end
end
def sanitize_filename(value)
IE
just_filename = value.gsub(/^.*(\|/)/, ‘’)
non alpha_numeric to “_”
@filename = just_filename.gsub(/[^\w.-]/,’_’)
convert regional letters to ASCII
@filename.to_unix_filename
end[/code]
To działa, natomiast nie wiem jak do tego wprowadzić walidację na format pliku oraz na wielkość pliku.
Na format pliku myśle że mógłbym użyć doc_field.content_type i sprawdzić czy jest included w arrayu
np [‘application/pdf’, ‘application/msword’, ‘text/plain’], z tymże nie mam pojęcia jak to dodać do normalnej walidacji.
Co do rozmiaru to z tego co czytałem muszę zrobić temp_file, którego będe usuwał po uploadzie jeśli plik będzie za duży a jeśli będzie dobry to zostaje na dysku. Tak czy owak nie wiem zabardzo jak to zakodować.
pozdrawiam
PS. Jedzie ktoś z forum na RailsConf Europe?