我正在使用s3_direct_upload gem 通过 Rails 将图像上传到 s3。这个 gem 基于这个 Railscast并使用jQuery-file-upload。它运作良好。
我现在想在上传图片之前调整它们的大小。创建了一个 fork来实现这一点,但作者提到:
“我不得不注释掉 add 方法,因为它会停止进程队列。我不知道为什么......但由于我没有同时上传许多文件,看来我无论如何都不需要那个回调。”
我已经能够实现这个 fork,但是不再调用进度条和上传事件,所以我尝试自己实现一个 fork 来实现我的所有功能。
下面的咖啡脚本代码不会引发任何错误,但也不会调整大小:
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)
我的叉子可以在这里找到