gpt4 book ai didi

ruby-on-rails-4 - 如何使用 StringIO 设置 content_type 以使用 PaperClip 上传到 S3

转载 作者:行者123 更新时间:2023-12-05 04:17:13 25 4
gpt4 key购买 nike

我正在使用以下代码将生成的 CSV 文件上传到 S3。

现在,目前整个过程都在进行,但是文件被存储为“text/plain”。如果我将内容类型验证更改为使用“text/csv”,它会因内容类型验证错误而失败。

为了简洁起见,我删除了一些正在运行的代码

class Export < ActiveRecord::Base
has_attached_file :export_file
validates_attachment_content_type :export_file, :content_type => "text/plain"
public
def export_leave_requests
... csv generated in memory here ...
self.update_attributes(export_file: StringIO.new(csv_file))
self.save!
end
end

如何才能将 content_type 设置为 CSV?

最佳答案

我只找到了一种方法来使它最终起作用..

在模型中(没有这个,它不会作为文本/csv 存储在 S3 上):

has_attached_file :export_file,
s3_headers: lambda { |attachment|
{
'Content-Type' => 'text/csv',
'Content-Disposition' => "attachment; filename=#{attachment.filename}",
}
}

在您的导出代码中:

    # read the content from a string, not a file
file = StringIO.open(csv)

# fake the class attributes
file.class.class_eval { attr_accessor :original_filename, :content_type }
file.original_filename = @export.filename
file.content_type = 'text/csv'
# Only needed if you will output contents of the file via to_s
file.class.class_eval { alias_method :to_s, :string }

@export.export_file = file

# If you don't do this it won't work - I don't know why...
@export.export_file.instance_write(:content_type, 'text/csv')

@export.save!

关于ruby-on-rails-4 - 如何使用 StringIO 设置 content_type 以使用 PaperClip 上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628212/

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