限制每个用户上传到AWS S3的总大小(MB)(使用Shrine)

乔治·凯弗伯克(GeorgKeferböck)

我正在开发一个Rails应用程序,该应用程序允许用户通过神社将其图像上传到AWS S3。到目前为止,该设置可以正常运行-但是,我想知道是否有任何直接的方法可以提取每个用户上传的总大小。

例如,我确实希望免费用户最多只能上传500MB,而会员则可以上传4GB。

一般来说,在Github或Google上找不到任何有用的东西,也许有人可以分享他们的知识。干杯!

当前代码:

photo.rb

class Photo < ApplicationRecord
  include ImageUploader[:image]

  before_create :set_name

  belongs_to :employee
  belongs_to :user

  private

    def set_name
      self.name = "Photo"
    end
end

image_uploader.rb

require "image_processing/mini_magick"

class ImageUploader < Shrine
  include ImageProcessing::MiniMagick
  plugin :determine_mime_type
  plugin :remove_attachment
  plugin :store_dimensions
  plugin :validation_helpers
  plugin :pretty_location
  plugin :processing
  plugin :versions

  Attacher.validate do
    validate_max_size 5.megabytes, message: "is too large (max is 5 MB)"
    validate_mime_type_inclusion %w[image/jpeg image/png], message: " extension is invalid. Please upload JPEGs, JPGs and PNGs only."
    validate_min_width 400, message: " must have a minimum width of 400 pixel."
    validate_min_height 250, message: " must have a minimum height of 250 pixel."
  end

  process(:store) do |io, context|

    size_800 = resize_to_limit!(io.download, 800, 800)
    size_300 = resize_to_limit!(io.download, 300, 300)

    {original: io, large: size_800, small: size_300}
  end
end
詹科

如果要image在Photo模型上添加验证错误消息,请在Shrine验证中执行此操作,因为您可以在其中访问Photo记录。

class ImageUploader < Shrine
  # ...

  Attacher.validate do
    record #=> #<Photo ...>

    all_images = record.user.photos
      .select { |photo| photo.image_attacher.stored? }
      .map { |photo| photo.image[:large] }

    total_size = all_images.map(&:size).inject(0, :+)

    if total_size + get.size > 500.megabytes
      errors << "exceeds total maximum filesize for your account (max is 500MB)"
    end

    # ...
  end
end

首先,我们只过滤存在的附件并将其上载到永久存储(例如,如果您使用后台,则将有一段时间仅附件缓存的文件)。

然后large,如您的示例所示,我们总结所有版本的图像大小

最后,我们将当前附件大小添加到总大小中,如果超出限制,我们将添加验证错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将用户窗口限制为文件上传到 AWS 中的 S3

Firebase存储-限制用户上传到Firebase存储的图像大小

从使用 Shrine 上传到 S3 的图像动态创建 MiniMagick 蒙太奇

如何限制用户可以上传到 Firebase 存储的文件总大小?

通过使用分段上传API将小于5 MB的文件上传到AWS S3存储桶

使用AWS Lambda上传到AWS S3

使用graphicMagic调整大小后将图像上传到AWS S3存储桶

无法上传到AWS S3

使用Shrine gem将图像上传到s3中的不同文件夹(按专辑名称)

如何使用Salesforce Apex将更大的文件(大于12 MB)上传到AWS s3存储桶

使用AWS Amplify从React Native上传到S3

使用Java将AWS文件上传到S3

当我使用 AWS CLI 将文件上传到 S3 存储桶时,我是什么用户?

如何限制上传到S3时文件的大小和模仿类型

(使用aws-sdk)如何查找存储在亚马逊s3中的文件夹的总大小

渲染一个存储在 S3 中的 Markdown 文件,上传到 shrine - Rails

使用Shrine在文件夹之间的AWS S3存储桶上移动文件

允许用户将内容上传到s3

使用AWS Appsync将图像上传到s3的过程 使用Appsync上传iOS图片

限制仅上传到mp3

aws s3 ls递归grep扩展名'.mov'和总大小

使用 AWS S3 v/s S3 Glacier 上传将文件上传到 Glacier

文件上传到AWS S3 Laravel 5.1

重试失败的文件上传到AWS S3

将网址图片上传到S3 AWS

如何将图像上传到AWS S3

Django:将CSV文件上传到AWS S3

如何使用Slingshot.createDirective限制文件上传到Amazon S3

需要使用 c# 实现 AWS S3 Bucket 文件上传。而文件大小没有限制