2009-08-12 64 views
6

我使用RESTClient實現了多格式將數據發送到一個RESTful Web服務使用RESTClient實現(這是熊貓的視頻編碼服務)。 但是,我傳遞給restclient(Technoweenie分支)的文件來自用戶提交的我自己的表單。具有多崗位

那麼,讓我們來看看這個。用戶將文件發佈到我的Rails應用程序。在我的控制器中,它從params [:file]接收文件。然後我想使用RestClient將params [:file]傳遞給Panda。

我得到的錯誤是對熊貓的服務器如下。我注意到堆棧跟蹤中的文件參數也在一個字符串中(我認爲這是熊貓變成一個更好的堆棧跟蹤字符串)。

~ 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

你可以說你怎麼搞清楚這個問題? – 2010-10-05 18:10:21

回答

1

我懷疑你真的可以通過從Rails的一個CGI風格上傳到PARAM和RESTClient實現期望它的工作。

在Rails定時上傳將具有不以發佈資源(如原來的文件名等)都屬於相當長的一段額外的屬性,以及一個Rails上傳包含IO與實際文件數據。另外Rails中的文件上傳對象可能是Tempfile句柄,可能是一個StringIO - 取決於上傳的大小。

什麼您有效地需要做的是「改頭換面」上傳的RESTClient實現妥善處理它,並重新包裝和倒帶將它視爲對象傳遞給RESTClient實現。也許你可以逃脫只是挑選上傳對象本身,而不是整個PARAMS的[:文件]

1

確認您的RESTClient實現動作可以在本地先保存。如果該行動無法在本地保存,那麼在故障排除時您可以更好地瞭解在哪裏尋找。