2

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

我尝试了两种解决方案:

before_save :set_content_type

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

和:

before_post_process :set_content_type

def set_content_type
    self.image.instance_write(:content_type, MIME::Types.type_for(self.image_file_name).to_s)
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"}
}
4

2 回答 2

0

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

于 2012-05-12T09:54:13.857 回答
0

我刚刚回答了一个类似的问题

您需要对其自身进行复制或使用带有查询字符串中指定的内容类型的预签名 url。

使用适用于 Ruby 的 AWS 开发工具包和url_for

object = bucket.objects.myobject
url = object.url_for(:read, :response_content_type => "image/png")
于 2012-05-04T12:31:48.320 回答