Return JSON 来自 S3

Return JSON from S3

我目前正在 rails 中构建一个非常简单的 API。我需要做的就是在 heroku 上上传文本和图像,将上传的数据存储在 JSON 中的 S3 中(所以我猜在保存时将其呈现为 JSON?)并将该数据拉入我的前端通过 AJAX。我正在使用回形针和 'aws-sdk' gem 并成功将图像保存到我的 S3 存储桶中,我只需要将其序列化为 JSON.

在我的控制器中我有:

def create
    @project = Project.new(project_params)
    render :json => @project

    @project.save
    redirect_to @project
end

我的模特:

class Project < ActiveRecord::Base

    has_attached_file :photo, :styles => { :small => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
    validates_attachment_content_type :photo, :content_type => /\Aimage\/.*\Z/

end

并且在我的生产环境中我有:

config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
    :bucket => ENV['S3_BUCKET_NAME'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
  }

目前这只是将图像保存到我存储桶中的子文件夹中,我想将其保存到一个文件夹中并呈现为 JSON。我是 rails 的新手,如有遗漏,请见谅。谢谢

据我所知,你已经让回形针正常工作了,所以你实际上已经有了所需的信息(它们由回形针保存),你只需要将它们渲染到 JSON。您可以忽略回形针创建的文件夹结构,gem 在内部管理它并正确生成 URL。

如果您需要 JSON 响应来响应来自控制器操作的 API 调用,您只需要这样做:

render json: { name: @project.photo_file_name, url: @project.photo.url }

当然,您可以使用您需要的任何参数来丰富您的 JSON。

这是一个 over-simplified 答案,要做到这一点 "the rails way" 你应该看看 JBuilder,然后创建 JSON 视图模板,方法与你相同HTML 个模板。或者在你的模型中覆盖 .as_json(options = nil),这样它会在你序列化时自动生成你需要的 JSON 格式。