Я использую Ruby on Rails 3, и в своем контроллере я просто пытаюсь проверить, больше ли размер загружаемого изображения, чем заданное значение.
Мне это нужно, потому что я бы хотел, чтобы сервер перед сохранением файла изображения на жестком диске проверял загружаемое изображение, чтобы загрузка не начиналась, если размер изображения больше пользовательского значения: I хотел бы предотвратить перегрузку .
Я пытаюсь сделать это следующим образом:
if request.headers["CONTENT_LENGTH"]
image_file_max_size ||= 16777216
@user.errors.add( :image, "is too big") if ( request.headers["CONTENT_LENGTH"].to_i > image_file_max_size.to_i )
end
# continue... (see UPDATES)
но, похоже, не работает. Кажется, значение CONTENT_LENGTH получается только после завершения загрузки, а не до.
Почему? Что случилось? Может быть, request.headers["CONTENT_LENGTH"]
не «перехватывает» размер загружаемого изображения?
ОБНОВЛЕНИЕ для @ jamiew ( commenter )
Мой сервер настроен на Apache + Phusion Passenger .
Я также использую Скрепка для бумаг драгоценный камень.
ОБНОВЛЕНИЕ для @ Джефф Пакетт ( комментатор )
В моем случае я выполняю AJAX-запрос , используя эту технику .
#continue
if @account.errors.empty?
if @account.update_attributes(params[:users_account])
flash.now[:notice] = "Good!"
else
flash.now[:notice] = "Bad!"
end
format.html {
render :action => 'edit'
}
format.js {
responds_to_parent do
render :action => 'update.js.rjs'
end
}
end