【发布时间】:2013-08-19 04:59:50
【问题描述】:
我正在使用 s3_direct_upload gem 通过 Rails 将图像上传到 s3。此 gem 基于 this Railscast 并使用 jQuery-file-upload。它运行良好。
我现在想在上传图片之前调整它们的大小。 fork was created 用于实现这一点,但作者提到:
“我不得不注释掉 add 方法,因为它停止了进程队列。我不知道为什么......但是由于我没有同时上传许多文件,看来我无论如何都不需要那个回调。”
我已经能够实现这个分支,但是不再调用进度条和上传事件,所以我尝试自己实现一个分支来实现我的所有功能。
下面的咖啡脚本代码不会抛出任何错误,但它也不会调整大小:
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)
如果要允许图像调整大小,我想用send 替换add,但我也想保留上传进度条和上传事件。我尝试用before_send 替换before_add,但它会创建一个无限循环:
unless settings.before_send and not settings.before_send(file)
我的叉子可以找到here
【问题讨论】:
-
你看过rmagick和carrierwave或carrierwave_direct吗?
-
我正在阅读一篇关于上传到 s3 的文章,关于carrierwave_direct,他们说“我发现它很糟糕,因为它迫使你改变你的载波设置(删除 store_dir 方法,真的吗?)它仅适用于单个文件”。我喜欢 jQuery-File-Upload,因为它有进度条并且易于实现。另外,在 Railscast 中,Ryan 经历了很多步骤来让 s3 上传与carrierwave 一起工作,jQuery-File-Upload 似乎更直接了。
-
多年后,但我也在努力寻找解决方案......有人想出来了吗?
-
@JasonGaluten 正如你所指出的那样已经有几年了,所以很难记住,但我认为我刚刚发布的解决方案就是它是如何解决的。
标签: ruby-on-rails ruby-on-rails-3.2 jquery-file-upload jquery-fileupload-rails