Ruby on rails 如何修复Aurigma上传到S3的内容类型?

Ruby on rails 如何修复Aurigma上传到S3的内容类型?,ruby-on-rails,amazon-s3,paperclip,content-type,Ruby On Rails,Amazon S3,Paperclip,Content Type,我们的用户有两种上传图像的方式。一个是通过一个简单的HTML表单,另一个是通过一个名为Aurigma的iPhone应用程序。我们使用回形针处理图像并将其存储在S3上。使用Aurigma上载的图像最终具有错误的内容类型,这导致它们作为应用程序打开 我尝试了两种解决方案: before_save :set_content_type def set_content_type self.image.instance_write(:content_type,"image/png") end 以及:

我们的用户有两种上传图像的方式。一个是通过一个简单的HTML表单,另一个是通过一个名为Aurigma的iPhone应用程序。我们使用回形针处理图像并将其存储在S3上。使用Aurigma上载的图像最终具有错误的内容类型,这导致它们作为应用程序打开

我尝试了两种解决方案:

before_save :set_content_type

def set_content_type
  self.image.instance_write(:content_type,"image/png")
end
以及:

似乎两种解决方案都被忽略了

使用回形针版本3.0.2、Aurigma版本1.3,我正在从iPhone上传一个屏幕截图。这是我的回形针配置:

has_attached_file :image, {
   :convert_options => { :all => '-auto-orient' }, 
   :styles => {
     :iphone3 => "150x150",
     :web => "300x300"
   },
   :storage => :s3, 
   :bucket => ENV['S3_BUCKET'],
   :s3_credentials => {
      :access_key_id => ENV['S3_KEY'],
      :secret_access_key => ENV['S3_SECRET']
   }, 
   :path => "/pictures/:id/:style.:extension",
   :url => "/pictures/:id/:style.:extension"}
}
我刚刚回答了一个问题

您需要对其自身进行复制,或者使用具有querystring中指定内容类型的预签名url

使用AWS SDK for Ruby和:

我刚刚回答了一个问题

您需要对其自身进行复制,或者使用具有querystring中指定内容类型的预签名url

使用AWS SDK for Ruby和:


据我所知,您首先将所有文件从客户端设备上传到自己的服务器(通过Aurigma Up),然后将这些文件上传到Amazon S3。我在尝试更改客户端设备上的内容类型时遇到类似的问题。这是不可能的。您应该在服务器上发送文件,然后在将文件上载到S3之前更改内容类型

据我所知,您首先将所有文件从客户端设备上传到自己的服务器(通过Aurigma Up),然后将这些文件上传到Amazon S3。我在尝试更改客户端设备上的内容类型时遇到类似的问题。这是不可能的。您应该在服务器上发送文件,然后在将文件上载到S3之前更改内容类型

谢谢,但我不知道如何实现这一点。我刚刚在问题中添加了回形针配置。回形针处理与S3的交互,所以我不知道如何访问桶并找到我的对象。或者你建议我直接使用S3 gem访问bucket,以某种方式检索图像,然后修改内容类型?@SjorsProvoost-很明显,我不是ruby开发人员,所以你必须填补空白。。。上载文件时,您使用Aurigma或回形针设置
内容类型
——如果两者都没有设置此选项,我会感到惊讶。看起来像是曲别针根据扩展名设置它,但这可能有助于在必要时覆盖它:。否则,我会直接使用AWS SDK将S3中的文件复制到自身,并设置正确的
内容类型
。或者使用ASW SDK生成您在站点上使用的url,并在url中设置
内容类型
。这不会改变S3上设置的内容,只是使用不同的
内容类型提供文件。我怀疑回形针可能也可以帮你这么做。。。对不起,我不能说得更具体了。谢谢,我应该能弄明白的。你给我的链接实际上是我以前尝试过的东西之一;与此同时,回形针内部似乎发生了一些变化。谢谢,但我不知道如何实现这一点。我刚刚在问题中添加了回形针配置。回形针处理与S3的交互,所以我不知道如何访问桶并找到我的对象。或者你建议我直接使用S3 gem访问bucket,以某种方式检索图像,然后修改内容类型?@SjorsProvoost-很明显,我不是ruby开发人员,所以你必须填补空白。。。上载文件时,您使用Aurigma或回形针设置
内容类型
——如果两者都没有设置此选项,我会感到惊讶。看起来像是曲别针根据扩展名设置它,但这可能有助于在必要时覆盖它:。否则,我会直接使用AWS SDK将S3中的文件复制到自身,并设置正确的
内容类型
。或者使用ASW SDK生成您在站点上使用的url,并在url中设置
内容类型
。这不会改变S3上设置的内容,只是使用不同的
内容类型提供文件。我怀疑回形针可能也可以帮你这么做。。。对不起,我不能说得更具体了。谢谢,我应该能弄明白的。你给我的链接实际上是我以前尝试过的东西之一;与此同时,回形针内部似乎发生了一些变化。
has_attached_file :image, {
   :convert_options => { :all => '-auto-orient' }, 
   :styles => {
     :iphone3 => "150x150",
     :web => "300x300"
   },
   :storage => :s3, 
   :bucket => ENV['S3_BUCKET'],
   :s3_credentials => {
      :access_key_id => ENV['S3_KEY'],
      :secret_access_key => ENV['S3_SECRET']
   }, 
   :path => "/pictures/:id/:style.:extension",
   :url => "/pictures/:id/:style.:extension"}
}
object = bucket.objects.myobject
url = object.url_for(:read, :response_content_type => "image/png")