我设法使用shrine将文件上传到s3,但是我试图根据它所属的相册将每张照片上传到不同的文件夹。
假设我有一个名为abc
:
将图片上传到相册:family
应将图片上传到:abc/family/...
将图片上传到相册:friends
应将图片上传到:abc/friends/...
我在初始化文件的Shrine.storages
中找不到办法。
我想这样做的方法是使用default_storage
和dynamic_storage
插件,但我还没有成功。
任何建议/解决方案?
非常感谢:)
关系:
Album has_many :photos
Photo belongs_to :album
Photo
班级为神社提供image_data
字段。
初始化程序中的代码:(基本内容)
s3_options = {
access_key_id: ENV["S3_KEY"],
secret_access_key: ENV["S3_SECRET"],
region: ENV["S3_REGION"],
bucket: ENV["S3_BUCKET"],
}
Shrine.storages = {
cache: Shrine::Storage::S3.new(prefix: "cache", **s3_options),
store: Shrine::Storage::S3.new(prefix: "store", **s3_options),
}
编辑:
我发现有一个名为pretty_location
的插件,它添加了一个更好的文件夹结构,但它不是我需要的,它在桶下添加/Photo/:photo_id/image/:image_name
,但我需要改为专辑名称
答案 0 :(得分:8)
我做到了!
覆盖var answers = req.body.answer.split(',');
文件中的generate_location
:
ImageUploader
这会将文件上传到:class ImageUploader < Shrine
def generate_location(io, context = {})
album_name = context[:record].album_name if context[:record].album
name = super # the default unique identifier
[album_name, name].compact.join("/")
end
end
如果你想要其他文件夹,那么&#34; :bucket_name/storage/:album_name/:file_name
&#34;您需要更改初始化文件中storage
下的prefix
。
您可能希望在Shrine.storages
上使用parameterize
(在我的情况下为field_name
),因此您不会在路径中包含空格和不需要的字符。
对于那里寻找答案的人!这对我有用,享受。
如果您有其他工作/更好的解决方案,请同时发布。 感谢。
答案 1 :(得分:0)
这里是一个示例,其中甚至可以从JSON文件中读取更多自定义内容
issue = jira.issue('PROJECT-10', expand='changelog')
for history in issue.changelog.histories:
for item in history.items:
if item.field == 'Link':
print("{} was linked to {} at {}".format(item.toString.split()[-1], issue, history.created))
这允许您通过运行每个循环来获得GUID的位置
{"ID":"14","post_author":"2","guid":"wp-content\/uploads\/2012\/02\/Be-True-Website-Logo3.png","post_type":"attachment","post_parent":"13"}
您也可以在Rails控制台中运行上述文件。
下面是您的上传器的外观...
require 'json'
require 'pry'
file = File.read('files.json')
array = JSON.parse(file)
posts = array[2]["data"] #please change this to match your JSON file
posts.each do |post|
post_id = post['post_parent']
if Post.find_by_id(post_id)
p = Post.find(post_id)
g = Graphic.new(post_id: post_id)
g.graphic = File.open(post["guid"])
else
g = Graphic.new
g.graphic = File.open(post["guid"])
end
g.save
end