Problema de FTP - Binários Corrompidos

0 respostas
A

Olá pessoal,
estou com um problema um pouco grave.
Acontece que estou tentando fazer o FTP de um arquivo binario e o mesmo chega corrompido na outra maquina, porém o FTP responde sucesso.
Alguns pontos interessantes:
O arquivo binario geralmente fica corrompido entre os tamanhos de 30 a 40 mb.
Quando eu coloco um sleep (de 1 minuto) no meio do codigo a transferencia do FTP é feita corretamente.
O problema só acontece no cliente, em nosso ambiente não conseguimos reproduzir de jeito nenhum.
Anteriormente usavamos o metodo storeFile ao inves de storeFileStream e ocorria o mesmo problema.
O codigo esta sequencial, ou seja, já verificamos que não tem chance de estar fazendo o FTP do arquivo antes que ele tenha terminado de ser gerado.

Segue o código que estamos usando:
private boolean uploadFile(DadosFtp dadosFtp) {
		String fromLocalFile = dadosFtp.getLocalFile();
		String toRemoteNameFile = dadosFtp.getRemoteFile();
		File file = new File(fromLocalFile);
		try {
			if (dadosFtp.getRemoteDir() != null && !dadosFtp.getRemoteDir().equals("")) {
				ftp.changeWorkingDirectory(dadosFtp.getRemoteDir());
			}
			logger.info("[INTVSI][FTP][upload] Inicio metodo uploadFile com o ipEr: " + dadosFtp.getIp()
					+ " fromLocalFile: " + fromLocalFile + " toRemoteNameFile:" + toRemoteNameFile);

			FileInputStream fis = new FileInputStream(file);
			logger.info("[INTVSI][FTP][upload] metodo uploadFile. enviando arquivo. ipEr: " + dadosFtp.getIp()
					+ " fromLocalFile: " + fromLocalFile + " toRemoteNameFile:" + toRemoteNameFile + ", "
					+ fis.available() + ", " + file.length());
			ftp.enterLocalPassiveMode();

			ftp.deleteFile(toRemoteNameFile);
			// Envia o arquivo.
			if (dadosFtp.getBinary()) {
				ftp.setFileType(FTP.BINARY_FILE_TYPE);
			}

			logger.info("[INTVSI] Aguardando 30s antes do output para mandar o arquivo com tamanho: " + file.length());
			// Thread.sleep(30000);
			OutputStream output = ftp.storeFileStream(toRemoteNameFile);

			logger.info("[INTVSI] Aguardando mais 30s antes de obter codigo do FTP para o arquivo com tamanho: "
					+ file.length());
			// Thread.sleep(30000);

			int reply = ftp.getReplyCode();

			if (!FTPReply.isPositivePreliminary(reply)) {
				logger.error("[ftp-envio] metodo uploadFile. Erro enviando arquivo com metodo storeFile. ipEr: "
						+ dadosFtp.getIp() + " fromLocalFile: " + fromLocalFile + " toRemoteNameFile:"
						+ toRemoteNameFile + " Tamanho do arquivo: " + file.length());
				output.close();
				fis.close();
				return false;
			}

			Long tamanho = null;
			try {
				logger.info("Thread currentThread = " + Thread.currentThread());
				tamanho = Util.copyStream(fis, output);
				logger.info("[ftp-envio] Tamanho enviado: " + tamanho);
			} catch (CopyStreamException e) {
				logger.error("[ftp-envio] ocorreu problema na transferencia do arquivo. Tamanho enviado: " + tamanho);
			}

			fis.close();
			output.close();

			if (!ftp.completePendingCommand()) {
				logger.error("[ftp-envio] impossivel completar comando pendente.");
			}

		} catch (IOException e) {
			logger.error("[INTVSI][FTP][upload] metodo uploadFile. Exception enviando arquivo. ipEr: "
					+ dadosFtp.getIp() + " fromLocalFile: " + fromLocalFile + " toRemoteNameFile:" + toRemoteNameFile
					+ "Exeption: " + AplicacaoUtils.getStackTrace(e));
			return false;
		}
		logger.info("[INTVSI][FTP][upload] Fim metodo uploadFile com o ipEr: " + dadosFtp.getIp() + " fromLocalFile: "
				+ fromLocalFile + " toRemoteNameFile:" + toRemoteNameFile + ". Tamanho local: " + file.length());

		return true;
	}

Qualquer sugestão é bem vinda...obrigada!!

Criado 15 de maio de 2012
Respostas 0
Participantes 1