1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Arquivo chegando corrompido

Bom dia pessoal!

Estou tentando enviar arquivos de atualização do meu sistema para os clientes mas os arquivos estão chegando corrompidos... Geralmente faltando 1KB no tamanho deles.

Ex.: arquivo original tem 32.800KB, o arquivo chega com 32.799KB.

Segue o Código do Servidor (envia o arquivo)

//Lendo Arquivo
arquivoASerEnviado = new File(caminhoExecutavel);
leituraDoArquivo = new FileInputStream(arquivoASerEnviado);

//Atribuindo o nome do arquivo
nomeArquivo = arquivoASerEnviado.getName();

//enviando o nome do arquivo
escritor.println(nomeArquivo);

// Criando tamanho de leitura
byte[] cbuffer = new byte[1024];
int bytesRead;

// Lendo arquivo criado e enviado para o canal de transferencia
while ((bytesRead = leituraDoArquivo.read(cbuffer)) != -1) {
    os.write(cbuffer, 0, bytesRead);
    os.flush();
}
//fechar leitura de arquivo
leituraDoArquivo.close();

Segue o Código do Cliente (recebe o arquivo)

//recebe o nome do arquio
nomeArquivo = leitor.nextLine();

//Informar situação a janela de atualização
Atualizacao.setStatusAtualizacao("Baixando executável atualizado...");

//Cria Arquivo no repositorio para receber os posteriores dados
gravarArquivo = new FileOutputStream(PesquisaNoBancoDeDados.pesquisarNoBancoDeDados("CAMINHOREPOSITORIO", "CONFIGATUALIZACAOSISTEMA", "") + (InfoSistemasOperacionais.TIPO_SISTEMA_OPERACIONAL_RESULT.equalsIgnoreCase("windows") ? "\\" : "/") + nomeArquivo);

// Prepara variaveis para transferencia
byte[] cbufferExe = new byte[1024];
int bytesRead;

//Gravar conteudo do arquivo recebido do servidor para o arquivo do cliente
while ((bytesRead = is.read(cbufferExe)) != -1) {
    gravarArquivo.write(cbufferExe, 0, bytesRead);
    gravarArquivo.flush();
}
//fecha o arquivo
gravarArquivo.close();

Alguém poderia me ajudar?!

  • só complementando.... O arquivo está chegando completo mas está dando a mensagem invalid or corrupt jarfile pra abrir, já abri ele com o winrar pra verificar se está tudo dentro, e está tudo... o que deve ser?

    SALVADORAUGUSTO   18 de mar de 2015
  • Quando passei por esse problema era o tamnhao do Buffer. Tente aumentar para 8192

    msartor   18 de mar de 2015
  • fiz o teste agora msartor, quando eu realizo colocando o host localmente, funciona perfeito, tanto usando 1024 no buffer quanto 8192, mas quando coloco pra funcionar com um host externo, o arquivo chega corrompido.

    SALVADORAUGUSTO   18 de mar de 2015
  • No meu caso é interno também não uso com host externo. Acho que viu ficar lhe devendo essa.

    msartor   19 de mar de 2015
  • Não tem problema, hoje eu arrumei uma solução mais segura pra ser feito, vou fazer os testes usando o host externo e caso dê certo eu informo aqui qual foi a solução. Só lembrando esta solução funcionou localmente.

    SALVADORAUGUSTO   19 de mar de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java sockets ou faça a sua própria pergunta.