Я использую гем s3_direct_upload для загрузки изображений в s3 с помощью Rails. Эта жемчужина основана на этой Railscast и использует jQuery-file-upload. Это работает хорошо.
Теперь я хотел бы изменить размер своих изображений перед их загрузкой. Для реализации этого была создана ветвь, но автор упомянул, что :
«Мне пришлось закомментировать метод добавления, так как он останавливает очередь процессов. Я не знаю, почему… Но поскольку я не загружал много файлов одновременно, кажется, мне все равно не нужен этот обратный вызов».
Мне удалось реализовать эту вилку, но индикатор выполнения и события загрузки больше не вызываются, поэтому я попытался реализовать вилку самостоятельно, чтобы реализовать все свои функции.
Приведенный ниже код coffeescript не выдает никаких ошибок, но и не изменяет размер:
setUploadForm = ->
$uploadForm.fileupload
disableImageResize: /Android(?!.*Chrome)|Opera/.test(window.navigator && navigator.userAgent)
imageMaxWidth: settings.image_max_width
imageMaxHeight: settings.image_max_height
disableImagePreview: true
Итак, теперь я пытаюсь заменить событие add
, как предложил автор, но я борюсь с логикой. Исходный код выглядит так:
add: (e, data) ->
file = data.files[0]
file.unique_id = Math.random().toString(36).substr(2,16)
unless settings.before_add and not settings.before_add(file)
current_files.push data
if $('#template-upload').length > 0
data.context = $($.trim(tmpl("template-upload", file)))
$(data.context).appendTo(settings.progress_bar_target || $uploadForm)
else if !settings.allow_multiple_files
data.context = settings.progress_bar_target
if settings.click_submit_target
if settings.allow_multiple_files
forms_for_submit.push data
else
forms_for_submit = [data]
else
data.submit()
и автор заменил вышеизложенное на:
send: (e, data) ->
file = data.files[0]
if settings.before_send
settings.before_send(file)
Я хотел бы заменить add
на send
, если это позволит изменять размер изображений, но я также хочу сохранить индикатор выполнения загрузки и события загрузки. Я попытался заменить before_add
на before_send
, но это создает бесконечный цикл:
unless settings.before_send and not settings.before_send(file)
Мой форк можно найти здесь