Pergunta

Estou usando atualmente Net::HTTP Em um script Ruby para publicar arquivos em um site por meio de uma postagem de formulário multipart. Funciona muito bem para arquivos pequenos, mas frequentemente tenho que enviar arquivos muito grandes usando este script e HTTP#post parece apenas aceitar dados post como um String Objeto, o que significa que o arquivo que estou enviando deve ser lido na memória antes que qualquer coisa possa ser enviada. Esse script está em execução em um servidor de produção ocupado, por isso é inaceitável devorar centenas de megabytes de RAM apenas para enviar um arquivo.

Idealmente, haveria um método que poderia receber um tamanho de buffer e um IO objeto, e enviaria pedaços de dados do tamanho de buffer, lendo do IO objeto apenas conforme necessário. Qual seria a melhor maneira de fazer isso acontecer? Eu perdi algo relevante em Net::HTTP?

Atualizar: Net::HTTP#body_stream(input) Parece bom, embora a documentação seja bastante ... escassa. Alguém capaz de me apontar para um bom exemplo disso em ação?

Foi útil?

Solução

Use net :: http#body_stream (entrada)

Exemplo para Postagem multipart sem streaming:

Outras dicas

Na verdade, consegui fazer upload de um arquivo usando o Body_Stream. O código -fonte completo está aqui:http://stanislavvitititskiy.blogspot.com/2008/12/multipart post-in-ruby.html

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