Pergunta

Eu estou usando restclient para um formulário de várias para enviar dados para um serviço web restful (é serviço de codificação de vídeo Panda). O truque, porém, é que o arquivo que estou passando para restclient (ramo Technoweenie) é proveniente de minha própria forma que a submete usuário.

Assim, vamos caminhar através deste. Um usuário posta um arquivo para o meu app rails. No meu controlador, que recebe o arquivo de params [: file]. Eu, então, quer passar params [: Arquivo]. Até Panda usando restclient

O erro que eu estou recebendo é no servidor Panda segue. Notei que o param arquivo no rastreamento de pilha está em uma corda bem (que eu assumo é Panda transformando-se em uma corda por um stacktrace melhor).

 ~ 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'
Foi útil?

Solução

Eu duvido que você pode realmente passar um param upload-estilo CGI de Rails em restclient e esperar que ele funcione.

Um carregamento regular em Rails teria bastante alguns atributos extras que não pertencem em um recurso destacados (como o nome do arquivo original e assim por diante), e um upload Rails contém um IO com os dados reais do arquivo. Também um objeto upload de arquivos em Rails pode ser um identificador de ficheiro temporário e pode ser um StringIO -., Dependendo do tamanho do upload

O que você efetivamente precisa fazer é "remontar" o seu upload para restclient para lidar com isso corretamente, e passar o objeto Tempfile reembalado e rebobinada até restclient. Talvez você pode começar afastado com apenas escolher o próprio objeto de upload em vez de todo o params [: file]

Outras dicas

Verifique se sua ação restclient pode salvar localmente em primeiro lugar. Se a ação não pode salvar localmente, então você terá uma idéia melhor onde procurar, enquanto a resolução de problemas.

Parece que o problema é com postagem de descanso para o cliente do arquivo, veja um método alternativo para postagem como meio-fio.

Muitos dos exemplos para a publicação de dados de formulários com várias partes sobre esta questão: ruby:? como publicar um arquivo via HTTP como multipart / form-data

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top