Pergunta

Eu sei que esse tipo de questões existem em SF, mas eles são muito específico, eu preciso de uma sugestão genérica. Eu preciso de um recurso para fazer upload de arquivos do usuário que pode ser de tamanho mais que 1 GB. Este recurso será um add-on para o arquivo existente-upload característica presente no aplicativo que atende a arquivos menores. Agora, aqui estão algumas das opções

  1. Use HTTP e Java applet. Enviar os arquivos em pedaços e juntá-los no servidor. Mas como para estrangular a n / w.
  2. Use HTTP e Flex aplicação. É melhor do que um applet compatibilidade do navegador WRT e quaisquer outras questões ambientais?
  3. Use FTP ou melhor SFTP ao invés de HTTP como um protocolo para o processo de carregamento mais rápido

Por favor, sugerem.

Além disso, tenho a certeza de que este processo de upload não dificultar a tarefa de outros usuários ou em outras palavras, não comer até b de outro usuário / w. Quaisquer mecanismos que podem ser feitas em n / w nível de aceleração desses processos?

Em última análise cliente queria ter FTP como uma opção. Mas eu acho que a resposta com a manipulação de arquivos por meio de programação também é legal.

Foi útil?

Solução

Para enviar ficheiros para um servidor, a menos que você Have para usar HTTP, FTP é o caminho a percorrer. Estrangulamento, eu não estou completamente certo de, pelo menos não de forma programática.

Pessoalmente, parece que as limitações da velocidade de upload seria melhor realizada no lado do servidor embora.

Outras dicas

Use qualquer cliente lado idioma desejado (a Java App, Flex, etc.), e empurrar para o servidor com HTTP PUT (sem Flex) ou POST. No código Java do lado do servidor, regular o fluxo de bytes em seu loop fluxo de entrada. Um bruto, simples, fragmento de exemplo que os limites de largura de banda para não mais do que uma média <= 10 KB / s:

InputStream is = request.getInputStream();
OutputStream os =  new FileOutputStream(new File("myfile.bin"));
int bytesRead = 0;
byte[] payload = new byte[10240];

while (bytesRead >= 0) {
    bytesRead = is.read(payload);

    if (bytesRead > 0) 
        os.write(payload, 0, bytesRead);

    Thread.currentThread().sleep(1000);
}

(Com mais complexidade pode-se regular com mais precisão a única banda de fluxo, mas torna-se complexa quando se considera buffers de soquete e tal. "Good enough" geralmente é bom o suficiente.)

Meu aplicativo faz algo semelhante ao anterior - que regulam tanto para cima (POST e PUT) e (GET) para baixo da largura de banda de fluxo. Aceitamos arquivos nos 100s de MB todos os dias e ter testado até 2GB. (Beyond 2GB há o Java traquinas int questões primitivas para lidar com.) Os nossos clientes são ambos Flex e curl. Ele funciona para mim, ele pode trabalhar para você.

Enquanto FTP é grande e tudo, você pode evitar muitos (mas não todos) problemas de firewall usando HTTP.

Se você quiser reduzir a largura de banda que você pode querer enviar os dados comprimidos (a menos que a sua já comprimido) Isso pode salvar 2-3 vezes o volume de dados, dependendo do que você está enviando.

Para um exemplo de boas práticas para fazer upload de arquivos grandes, e as várias formas de enfrentá-lo, dê uma olhada no flickr.com (você pode ter que se inscrever para obter a página de upload)

Eles oferecem várias opções, incluindo formulário HTTP upload, um cliente de desktop java, ou algum tipo de dispositivo orientado a javascript que eu não consigo descobrir. Eles não parecem em qualquer lugar uso de flash.

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