2016-06-03 12 views
0

Meine Idee ist es, ein TempFile in eine Zeichenfolge zu konvertieren und diese Zeichenfolge dann wieder in eine TempFile zu konvertieren. Gibt es einen einfacheren Weg, dies mit Ruby zu tun?Serialize Tempfile zum Senden im Hintergrund-Worker

file = #<File:/var/folders/b6/c3fypxm50b75hszctcgr8brm0000gn/T/RackMultipart20160603-8771-rehwdq.pdf> 

string_file = file.to_s 
new_file = file.to_file 
+0

was meinen Sie, indem Sie die Datei in einen String konvertieren? Das Dateiobjekt in eine Zeichenfolge, Datei-URL in eine Zeichenfolge oder Dateiinhalt in eine Zeichenfolge? – lusketeer

+0

Das Dateiobjekt selbst. – Ctpelnar1988

+0

Möchten Sie nur eine Kopie der Datei erstellen und ihr einen anderen Namen geben? – lusketeer

Antwort

1

Was ist mit so etwas? Dies funktioniert mit einer einfachen Textdatei für mich.

Rubin

require 'json/add/struct' 

Struct.new("FileObject", :name, :content) 

file = File.open('/tmp/file.txt',mode='r') 
file_name = file.path.split('/').last 
file_contents = file.read 
file_obj = Struct::FileObject.new(file_name,file_contents) 
file_json = file_obj.to_json 
file.close 

## Convert back to file 
new_file_obj = JSON.parse(file_json, :create_additions => true) 
new_file = File.open('/tmp/saved_' + new_file_obj.name,'w+') 
new_file.write(new_file_obj.content) 
new_file.close 

Ausgabe

2.3.0 :001 > require 'json/add/struct' 
=> true 
2.3.0 :002 > Struct.new("FileObject", :name, :content) 
=> Struct::FileObject 
2.3.0 :003 > file = File.open('/tmp/file.txt',mode='r') 
=> #<File:/tmp/file.txt> 
2.3.0 :004 > file_name = file.path.split('/').last 
=> "file.txt" 
2.3.0 :005 > file_contents = file.read 
=> "some file content\nblah\n\nblah blah\n" 
2.3.0 :006 > file_obj = Struct::FileObject.new(file_name,file_contents) 
=> #<struct Struct::FileObject name="file.txt", content="some file content\nblah\n\nblah blah\n"> 
2.3.0 :007 > file_json = file_obj.to_json 
=> "{\"json_class\":\"Struct::FileObject\",\"v\":[\"file.txt\",\"some file content\\nblah\\n\\nblah blah\\n\"]}" 
2.3.0 :008 > file.close 
=> nil 
2.3.0 :009 > new_file_obj = JSON.parse(file_json, :create_additions => true) 
=> #<struct Struct::FileObject name="file.txt", content="some file content\nblah\n\nblah blah\n"> 
2.3.0 :010 > new_file = File.open('/tmp/saved_' + new_file_obj.name,'w+') 
=> #<File:/tmp/saved_file.txt> 
2.3.0 :011 > new_file.write(new_file_obj.content) 
=> 34 
2.3.0 :012 > new_file.close 
=> nil 
+0

'JSON :: GeneratorError: Quellsequenz ist illegal/falsch formatiert utf-8' Ich bekomme diesen Fehler, wenn ich versuche, das obj im Hintergrund-Worker zu senden. – Ctpelnar1988

+0

Ich änderte es etwas mit struct und to_json. Geht das für dich? – Brian

+0

Sie haben es im Grunde genommen. Was ich daraus gewonnen habe, war 'file = # '. 'file_path = file.path' und übergab das an meinen Hintergrund-Worker, dann habe ich auf der anderen Seite über den Pfad auf die Datei zugegriffen und sie erneut in einer Variablen gespeichert. Vielen Dank. – Ctpelnar1988