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

时间:2012-05-04 10:31:30

标签: ruby-on-rails amazon-s3 paperclip content-type

我们的用户有两种上传图片的方式。一种是通过简单的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

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

使用paperclip 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"}
}

2 个答案:

答案 0 :(得分:0)

我刚刚回答了similar question

您需要自行复制或使用预先签名的网址,其中包含查询字符串中指定的内容类型。

使用AWS SDK for Ruby和url_for

object = bucket.objects.myobject
url = object.url_for(:read, :response_content_type => "image/png")

答案 1 :(得分:0)

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