2009-08-12 11 views
6

Uso il client per un modulo multipart per inviare dati a un servizio Web restful (è il servizio di codifica video Panda). Il trucco, però, è che il file che sto passando al restclient (ramo Technoweenie) proviene dal mio stesso modulo che un utente invia.Uso del client rimanente con post multipart

Quindi, passiamo attraverso questo. Un utente pubblica un file nella mia app di rotaie. Nel mio controller, riceve il file da params [: file]. Poi voglio passare params [: file] a Panda usando RestClient.

L'errore che sto ottenendo è sul server Panda seguito. Ho notato che il parametro del file nella traccia dello stack è anch'esso in una stringa (che presumo sia che Panda si trasformi in una stringa per uno stacktrace più bello).

~ Started request handling: Wed Aug 12 18:05:15 +0000 2009 
~ Params: {"format"=>"html", "multipart"=>"true", "account_key"=>"SECURE_KEY", "action"=>"upload", "id"=>"SECURE_ID", "controller"=>"videos", "file"=>"#<File:0xcf02ca4>"} 
~ 9bfb1750-6998-012c-4509-12313900b0f6: (500 returned to client) InternalServerErrorcan't convert nil into String 
/var/local/www/panda/app/models/video.rb:246:in `extname' 
/var/local/www/panda/app/models/video.rb:246:in `initial_processing' 
/var/local/www/panda/app/controllers/videos.rb:79:in `upload' 
+0

Puoi dire come pensi di questo problema? –

risposta

1

Dubito che si possa davvero passare un parametro di caricamento in stile CGI da Rails al client e aspettarsi che funzioni.

Un caricamento regolare in Rails avrebbe alcuni attributi aggiuntivi che non appartengono a una risorsa pubblicata (come il nome file originale e così via) e un caricamento di Rails contiene un IO con i dati del file effettivo. Anche un oggetto di caricamento file in Rails potrebbe essere un handle Tempfile e potrebbe essere un StringIO, a seconda delle dimensioni del caricamento.

Ciò che si ha effettivamente bisogno di fare è "riassemblare" il proprio upload per rest-client per gestirlo correttamente e passare l'oggetto Tempfile riconfezionato e riavviato al restclient. Forse puoi farla franca selezionando solo l'oggetto di caricamento stesso invece dell'intera param [: file]

1

Confermare che la vostra azione restclient può salvare in locale prima. Se l'azione non può essere salvata localmente, allora avrai un'idea migliore su dove guardare mentre risolvi i problemi.

Problemi correlati