gpt4 book ai didi

amazon-s3 - 读取带有 "+"符号的 S3 存储桶文件时,Amazon S3 访问被拒绝

转载 作者:行者123 更新时间:2023-12-02 22:04:51 26 4
gpt4 key购买 nike

我正在开发一个 Rails 应用程序,我在其中使用带有雾存储的载波。我的表单中有几个字段,用户可以在其中提交应用程序(名称、简短和详细说明、图像字段)。上传文件的名称是从我表单的“名称”字段中的字段名称中获取的。

例如,当我上传名为 Notepad 的文件时,一切正常,图像显示在我的应用程序页面上。但是,当我在表单字段中上传名称为 Notepad++ 的图片时,它会成功上传到亚马逊,但我得到的是损坏的图片。查看其源代码并尝试打开其 url 会产生错误

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>0DBACCF4C0301B02</RequestId>
<HostId>
raYVzr9xubG0NA/b57saIJzfc2YhnvhD0tafYmo34ewOBY6/0j1AKUFC/lEoY+6h
</HostId>
</Error>

所有带有加号的名称都会出现这种情况。可能是什么问题呢。我已经尽我所能,但一无所获。这是我的 image_uploader 类

# encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base

include CarrierWave::RMagick

storage :fog

include CarrierWave::MimeTypes
process :set_content_type

def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.name.to_s.downcase.underscore || model.id.to_s.underscore.downcase}"
end

def filename
"#{model.name.to_s.underscore.downcase}-#{secure_token}" if original_filename.present?
end

def default_url
"fallback/#{model.class.to_s.underscore}/" + [version_name, "noimage.gif"].compact.join('_')
end

version :nano_thumb do
process :resize_to_fill => [20, 20]
end

version :mini_thumb do
process :resize_to_fill => [25, 25]
end

version :small_thumb do
process :resize_to_fill => [34, 34]
end

version :thumb do
process :resize_to_fill => [48, 48]
end

version :small do
process :resize_to_fill => [86, 86]
end

version :medium do
process :resize_to_fill => [259, 259]
end

version :large do
process :resize_to_fill => [518, 518]
end

def extension_white_list
["jpg", "jpeg", "gif", "png", ""]
end

protected
def secure_token(length=9)
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2))
end

end

谢谢

最佳答案

这是 carrierwave 中的一个已知问题,已在 master 上修复但尚未发布。您的选择是:

  1. 使用 carrierwave master 而不是官方 gem 版本。

  2. 更新 sanitize_regexp排除 + 字符。

    CarrierWave::SanitizedFile.sanitize_regexp =/[^a-zA-Z0-9.-_]/

新的上传将适用于其中任何一个,但您仍然需要手动修复旧的(通过 s3 挖掘以找到正确的文件名,然后更新您的数据库)。或者只是删除它们。

关于amazon-s3 - 读取带有 "+"符号的 S3 存储桶文件时,Amazon S3 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com