2012-05-10 3 views
8

Ich habe bei Base64 codierte Zeichenfolge einer Bilddatei. Paper Clip mitDatei hochladen Base64 codierte Zeichenfolge in PaperClip mit Rails

Mein Controller-Code, den ich brauche, es zu speichern ist

@driver = User.find(6) 
encoded_file = Base64.encode64(File.open('/pjt_path/public/test.jpg').read) 
decoded_file = Base64.decode64(encoded_file) 

@driver.profile_pic = StringIO.open(decoded_file) 
@driver.save 

In meinem Benutzermodell

has_attached_file :profile_pic, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => '/icon.jpg' 

Derzeit ist die Datei als Textdatei gespeichert wird (stringio.txt). Aber wenn ich die Erweiterung zu JPG ändere, kann ich es als Bild sehen. Wie kann ich das Bild mit StringIO korrekt benennen?

Ich habe Schienen 3.2, Rubin 1.9.2, 3.0.3 Büroklammer

Antwort

11

Ich behob das Problem mit

encoded_file = Base64.encode64(File.open('/pjt_path/public/test.jpg').read) 
decoded_file = Base64.decode64(params[:encoded_image]) 
begin 
    file = Tempfile.new(['test', '.jpg']) 
    file.binmode 
    file.write decoded_file 
    file.close 
    @user.profile_pic = file 
    if @user.save 
    render :json => {:message => "Successfully uploaded the profile picture."} 
    else 
    render :json => {:message => "Failed to upload image"} 
    end 
ensure 
    file.unlink 
end 
+0

können Sie bitte mehr von Ihrem Code? Ich fand es sehr interessant! –

+1

@EmSta - Ich habe den vollständigen Code hier gepostet. Dieser Code wird in meiner Controller-Funktion hinzugefügt. Bitte lassen Sie mich wissen, was mehr Code, den Sie benötigten –

+0

Ich öffnete eine neue Frage: http://StackOverflow.com/Questions/17336788/paperclip-upload-an-image-encoded-with-base64 Vielleicht können Sie mir helfen @AmalKumarS –