gpt4 book ai didi

ruby-on-rails - rails : Pass Tempfile to Sidekiq

转载 作者:行者123 更新时间:2023-12-04 06:03:19 25 4
gpt4 key购买 nike

我在收集附件作为临时文件的邮件端点上工作,然后我需要将它们传递给 Sidekiq Worker 以将它们上传到 AWS。

我的问题是我被困在我试图保留 Tempfile 然后在我的工作人员中打开它的时候。我不知道我应该用什么打开我的 Tempfile(路径、文件名...)。

这是我将调用 worker 的函数:

if @email
# Remove Tempfile autodelete
@email.attachments.each {|t| ObjectSpace.undefine_finalizer(t.tempfile)}

# Griddler Email to hash for Sidekiq
email = {
attachments: @email.attachments.map {|att| {
type: att.content_type,
name: att.original_filename
}},
raw_text: @email.raw_text,
raw_html: @email.raw_html,
from: @email.from,
subject: @email.subject,
to: @email.to,
cc: @email.cc
}

EmailResponseWorker.perform_async email
end

这里我使用 ObjectSpace.undefine_finalizer(t.tempfile)禁用自动删除。

然后在我的 Sidekiq Worker 中:
def perform(email)
@email = email

attachments = @email['attachments'].inject([]) do |arr, file|
object = S3_BUCKET.objects["attachments/#{SecureRandom.uuid}/#{file['name']}"].write(Tempfile.open(file['name']), acl: :public_read)
arr << {url: object.public_url.to_s, type: file['type'], name: file['name']}
end
end

这里的attachments['name'] 是文件名。

最佳答案

获取 path从临时文件并将其作为通常的文件路径处理:

path: att.tempfile.path

它是临时文件本身的路径, original_filename是客户端传递的文件名,而不是您需要的文件名。

作业成功完成后,不要忘记取消链接。

关于ruby-on-rails - rails : Pass Tempfile to Sidekiq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750828/

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