我们的用户有两种上传图片的方式。一种是通过简单的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"}
}
答案 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之前更改内容类型。