gpt4 book ai didi

ruby-on-rails-3 - 通过回形针4附加时在S3中设置内容类型?

转载 作者:行者123 更新时间:2023-12-04 03:37:39 27 4
gpt4 key购买 nike

我正在尝试使用回形针4.1.1将CSV文件附加到Rails3模型上,但是我无法使S3报告的内容类型成为text/csv(相反,我得到text/plain)。当我随后从S3下载文件时,扩展名将更改为匹配内容类型,而不是保留原始扩展名(因此test.csv作为test.txt下载)。

据我所知,当您上传文件时,FileAdapter会在创建内容时使用ContentTypeDetector(称为file -b --mime filename)确定的任何值来缓存内容类型。不幸的是,CSV文件返回的text/plain很有意义,因为您如何才能真正分辨出这一点?尝试使用attachment.instance_write(:content_type, 'text/csv')设置content-type只会设置模型中的值,而不会影响写入S3的内容。

FileAdapter的content_type在这里初始化:https://github.com/thoughtbot/paperclip/blob/v4.0/lib/paperclip/io_adapters/file_adapter.rb#L14

创建该io_adapter的调用:
https://github.com/thoughtbot/paperclip/blob/v4.0/lib/paperclip/attachment.rb#L98

我在这里确实有一个通用的上传文件(因此,我无法在has_attached_file的S3 header 定义中对内容类型进行硬编码),并且我真的不想要内容类型的欺骗保护。有什么想法/建议吗?我不希望降级到3.5,因为这意味着延迟痛苦,但是,如果那是唯一的方法,我会娱乐的。

最佳答案

如果您使用的是fog,则可以执行以下操作:

has_attached_file :report,
fog_file: lambda { |attachment|
{
content_type: 'text/csv',
content_disposition: "attachment; filename=#{attachment.original_filename}",
}
}

如果您将Amazon S3用作存储提供商,则应该可以使用以下方法:
has_attached_file :report
s3_headers: lambda { |attachment|
{
'Content-Type' => 'text/csv',
'Content-Disposition' => "attachment; filename=#{attachment.original_filename}",
}
}

关于ruby-on-rails-3 - 通过回形针4附加时在S3中设置内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23124747/

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