标签: rails-activestorage

Rails 5 ActiveStorage中的ImageOptimization

我计划在我的一个网站上将Rails升级到5.2并引入ActiveStorage,截至目前我使用Paperclip和paperclip_optimizer.其中一个不利的方面是,当用ActiveStorage替换回形针时,我将丢失优化器.如何在ActiveStorage中实现用户上传的自动图像优化?

rails-activestorage ruby-on-rails-5.2

6
推荐指数
1
解决办法
1702
查看次数

通过API使用Activestorage(直接上传)

我想使用Rails作为移动应用程序(Android和iOS)的后端,其中一个要求是文件上传.

我无法通过这种方式直接上传使用Activestorage找到任何资源 - 有没有人有示例或提示?

另一种选择 - 我认为 - 是对activestorage.js进行反向工程,并完成其所做的工作.但也许我不是第一个有这种需求的人......

ruby-on-rails rails-activestorage

6
推荐指数
1
解决办法
1240
查看次数

ActiveStorage 获取脏对象,说明图像是否已更改

我想知道 ActiveRecord 模型对象上的图像是否已更改,以便我可以执行其他功能,但看不到任何可用的信息。

IE

object.image.changed? or object.image_changed? or object.changed? 
Run Code Online (Sandbox Code Playgroud)

rails-activestorage ruby-on-rails-5.2

6
推荐指数
1
解决办法
588
查看次数

从 Active Storage 更改默认 url

我们可以更改从活动存储创建的默认“永久”url 以重定向到 S3。类似于 rails/active_storage/representations/。我不喜欢 url 中的框架名称。

谢谢

ruby-on-rails rails-activestorage

6
推荐指数
1
解决办法
3851
查看次数

Rails 5.2 Active Storage 清除/删除附件不会删除 Blob 或附件记录

我正在使用 rails 5.2 并且我正在尝试使用 Amazon S3 设置 Active Storage。我的应用程序可以完全访问 S3,并且可以将avatar图像附加到user. 但是当我尝试删除头像时,我遇到了以下问题:

> user.avatar.attached? #true`
> user.avatar.purge
   S3 Storage (697.9ms) Deleted file from key: Ns1KBRzdgxLNnY31sH72vT5t
   S3 Storage (227.0ms) Deleted files by key prefix: variants/Ns1KBRzdgxLNnY31sH72vT5t/
Aws::S3::Errors::AccessDenied: Access Denied
Run Code Online (Sandbox Code Playgroud)

然后,当我检查存储桶时,该文件实际上已被删除,但在数据库中查找BlobAttachment记录仍然存在。

任何想法为什么会发生这种情况?

编辑 我按照接受的答案的建议对我的 IAM 权限进行了一些更新。这些是我更新的项目:

  • 将策略附加到我的 IAM 用户,而不是我的 s3 存储桶。
  • 列出了所有必需的操作。
  • 在资源字段中添加整个存储桶,而不仅仅是所有对象。

最后我的策略 json 看起来像这样:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::my-bucket/*", …
Run Code Online (Sandbox Code Playgroud)

rails-activestorage ruby-on-rails-5.2

6
推荐指数
1
解决办法
2140
查看次数

Rails ActiveStorage错误 - MessageVerifier-InvalidSignature

我正在开发一个需要模型ActiveStorage has_many_attached :photos情况的项目Location.

我在下面设置了代码,但在尝试上传表单时,收到以下错误:

ActiveSupport::MessageVerifier::InvalidSignature in 
                                 LocationsController#attach_photo
Run Code Online (Sandbox Code Playgroud)

这是将文件"添加"到特定父记录(即:Location记录)的附件集的方法吗?

Location 模型

class Location < ApplicationRecord
  ...
  has_many_attached :photos
  ...
end
Run Code Online (Sandbox Code Playgroud)

地点控制器

class LocationsController < ApplicationController
  ...
  def attach_photo
    @location = Location.find(params[:id])
    @location.photos.attach(params[:photo])
    redirect_to location_path(@location)
  end
  ...
end
Run Code Online (Sandbox Code Playgroud)

视图

<%= form_tag attach_photo_location_path(@location) do %>
  <%= label_tag :photo %>
  <%= file_field_tag :photo %>

  <%= submit_tag "Upload" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

视图

resources :locations do
  member do
    post :attach_photo
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-activestorage

6
推荐指数
2
解决办法
3279
查看次数

如何将自定义服务添加到ActiveStorage

我想向ActiveStorage添加自定义服务,因为我想覆盖ActiveStorage :: Service :: S3Service服务的url方法,以便可以在S3存储桶前面使用CloudFront CDN。我想我不需要参数,只需要键,因为CloudFront实例将具有对S3存储桶的完全读取权限。presigned_url

ruby-on-rails amazon-web-services rails-activestorage

6
推荐指数
1
解决办法
1369
查看次数

在 JSON 响应中包含图像的 ActiveStorage URL?

我试图简单地显示附加到我的用户模型的图像的 URL。

  def show
    render json: @user, include: [:images]
  end
Run Code Online (Sandbox Code Playgroud)

上面的回复给了我:-

{
    "id": 2288,
    "name": "Joe Bloggs",
    "images": [
        {
            "id": 1,
            "name": "images",
            "record_type": "User",
            "record_id": 2288,
            "blob_id": 1,
            "created_at": "2021-04-20T13:53:16.663Z"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

从 Rails API 文档和其他 stackoverflow 帖子中,我应该使用如下所示的service_urlor方法:-url

  def show
    render json: @user, include: [images: {methods: :service_url}]
  end
Run Code Online (Sandbox Code Playgroud)

然而,上面的内容给了我:-

"status": 500,
"error": "Internal Server Error",
"exception": "#<URI::InvalidURIError: bad URI(is not URI?): nil>",
Run Code Online (Sandbox Code Playgroud)

我如何在这里实现我想要的?

我还使用 binding.pry 尝试手动获取路径

@user.images.first.url
@user.images.first.blob
@user.images.first.blob.url
@user.images.first.blob.service_url
Run Code Online (Sandbox Code Playgroud)

以上每一项都给了我:-

NameError: uninitialized constant …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-activestorage

6
推荐指数
1
解决办法
1228
查看次数

Rails 在尝试使用 activeadmin 和主动存储时找不到 ActiveStorage::Blob 关联的有效模型

我有:

  1. 设置 Rails 项目

  2. 添加了活动管理员。

  3. 设置 Active Storage,更新配置以进行本地连接并执行以下操作:

    bin/rails active_storage:安装
    bin/rails db:migrate

然后,当尝试建立一个Document带有附加文件的非常简单的模型时:

class Document < ApplicationRecord
    has_one_attached :file
end
Run Code Online (Sandbox Code Playgroud)

最简单的活动管理页面可能是这样的:

ActiveAdmin.register Document do
  permit_params :name, :type, :file
end
Run Code Online (Sandbox Code Playgroud)

我在尝试访问该页面时收到以下错误:

Rails 找不到 ActiveStorage::Blob 关联的有效模型。请在关联声明中提供 :class_name 选项。如果 :class_name 已提供,请确保它是 ActiveRecord::Base 子类。

我不确定出了什么问题。从文档看来,迁移并将该行添加到模型后一切都应该正常工作。

Ruby 版本:“3.1.1”
Rails 版本:“7.0.2”

ruby ruby-on-rails activeadmin rails-activestorage

6
推荐指数
1
解决办法
2639
查看次数

Rails Active Storage - 保留现有文件/上传吗?

我有一个 Rails 模型:

has_many_attached :files
Run Code Online (Sandbox Code Playgroud)

默认情况下,通过 Active Storage 上传时,如果您上传新文件,它会删除所有现有上传内容并将其替换为新文件。

我有一个控制器破解,由于多种原因,它不太理想:

在 Rails 6 中使用 has_many_attached 更新图像的正确方法是什么

有没有办法配置 Active Storage 以保留现有的存储?

ruby-on-rails rails-activestorage

6
推荐指数
2
解决办法
3500
查看次数