繁体   English   中英

使用Rails生成神社宝石:使用上传端点生成版本吗?

[英]Shrine gem with Rails: generate versions with upload endpoint?

我将Shrine gem与Rails 5一起使用。我启用了插件upload_endpoint,版本,处理和重新缓存。 我希望在上传端点响应中获得生成的版本。

class VideoUploader < Shrine
  plugin :processing
  plugin :versions
  plugin :recache
  plugin :upload_endpoint

  plugin :upload_endpoint, rack_response: -> (uploaded_file, request) do

    # ??? I expected uploaded_file to have thumbnail version here ???

    body = { data: uploaded_file.data, url: uploaded_file.url }.to_json
    [201, { "Content-Type" => "application/json" }, [body]]
  end

  process(:recache) do |io, context|
    versions = { original: io }

    io.download do |original|
      screenshot = Tempfile.new(["screenshot", ".jpg"], binmode: true)
      movie = FFMPEG::Movie.new(original.path)
      movie.screenshot(screenshot.path)
      screenshot.open # refresh file descriptors

      versions[:thumbnail] = screenshot
    end

    versions
  end
end

为什么仅在保存整个记录时才发生进程回调进程(:recache)? 以及如何使其在直接上传后立即生成版本?

:recache操作仅在将文件分配给模型实例时以及验证成功之后才会发生。 因此, recache插件不是您想要的。

每当Shrine上传文件时,它都会在该上传文件中包含:action参数,这与您注册process块时匹配。 目前尚无记录,但upload_endpoint包含action: :upload ,因此只需使用process(:upload)

process(:upload) do |io, context|
  # ...
end

在您:rack_response块, uploaded_file现在将上传文件的哈希,这样你就不会能够调用#data就可以了。 但是您可以直接将它们包括在哈希中,它们应该自动转换为JSON。

  plugin :upload_endpoint, rack_response: -> (uploaded_file, request) do
    body = { data: uploaded_file, url: uploaded_file[:original].url }.to_json
    [201, { "Content-Type" => "application/json" }, [body]]
  end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM