0

我正尝试从刚刚在我的应用程序中注册的用户上传至亚马逊s3的脸书或推特上的现有图片,但有些验证不会让我保存用户对象,抛出:Image is invalid.我认为这是对我的extension_white_list但我删除它和它的饲养说Image is invalid.上传到S3的脸书/推特用户图片上的图片无效

  • 这是不是一个错误,它只是一个从carrierwave验证我想消息,即使图片url字符串是正确的。

AvatarUploader

# encoding: utf-8 

class AvatarUploader < CarrierWave::Uploader::Base 

    include CarrierWaveDirect::Uploader 

    include CarrierWave::RMagick 

    # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility: 
    include Sprockets::Helpers::RailsHelper 
    include Sprockets::Helpers::IsolatedHelper 

    include CarrierWave::MimeTypes 
    process :set_content_type 

    def store_dir 
    "avatar/#{model.id}" 
    end 

    version :thumb do 
    process resize_to_fill: [50, 50] 
    end 

    # def extension_white_list 
    # %w(jpg jpeg gif png bmp) 
    # end 
end 

创建用户:

... 
    new_user = User.create(:name => auth['info']['name'], 
        :email => User.email_from_auth(auth)) 
    auth_image_url = Authentication.larger_image(auth) # a string of user image url from social network authentication data. ie: http://a0.twimg.com/profile_images/1255111511/skyline.jpg 
    unless auth_image_url.blank? 
     new_user.remote_image_url = auth_image_url 
     new_user.save 
    end 
... 
+0

你检查日志使用SDK的s3操作?如果上传无效,它应该会提供更多信息。当您在浏览器中使用它时,网址是否有效? – Keshi

+0

是的,该网址的作品。 不,它的图像没有被上传,因为验证失败。 – p1nox

+0

你是否从SDK中获得任何注销?如果url在提取图片时是正确的,那么它可能是上传时产生的签名问题 – Keshi

回答

2

固定!该错误已无关carrierwave,只是一个事实,即对象不会在当下的数据库中存在该图像是上传,首先我保存新的用户,然后:

after_create :upload_image_from_auth 

def upload_image_from_auth 
    auth = self.authentications.first 
    unless auth.nil? 
    self.remote_image_url = auth.larger_image 
    self.save 
    end 
end