Executar comando via FTP

8 respostas
A

Pessoal, tenho uma aplicação que faz o envio de arquivo via FTP sem problemas, só que tenho a seguinte duvida:

Após enviar o arquivo FTP quero executar um comando dentro do diretório onde está o arquivo. Para isto eu executo o seguinte método:

public static void executaComando(String comando) throws Exception{ Process processo = Runtime.getRuntime().exec(comando); processo.exitValue(); }

Só que este método está executando localmente e não no servidor onde se econtra o arquivo que foi movido por FTP. Alguem poderia me dar uma dica de como fazer isto?

Este é meu método que faz a movimentação do arquivo por FTP.

public static void moverArquivoFtp(File arquivo, String provedorFtp,
					String usuario, String senha )
		throws SocketException, IOException, Exception {
		
		FTPClient ftp = new FTPClient();
		ftp.connect(provedorFtp);
		
		if(FTPReply.isPositiveCompletion(ftp.getReplyCode())){
			ftp.login(usuario, senha);
		}else{
			ftp.disconnect();
			throw new Exception("Conexão recusada.");
		}

		InputStream is = new FileInputStream(arquivo);
		ftp.storeFile(arquivo.getName(), is);
		ftp.disconnect();
	}

Agradeço a todos.

8 Respostas

P

Via ftp não existe (não que eu saiba). Você pode fazer um script no servidor que leia o diretório e veja se o arquivo terminou o upload e executar o comando. Ou conectar por ssh em java. Bom, eu aconselho a primeira opção.

V

O protocolo FTP não suporta o envio de um comando para o servidor. O que você quer, por FTP, não é possível.

Talvez seja possível se você tiver algum acesso, como SSH, à máquina servidora.

A

Este é o comando que estou querendo executar:

put <Parametro 1> tllib01 <Parametro 2>

E

Existem alguns comandos que se podem executar em um cliente FTP. Entretanto, o comando “put” normalmente não precisa de nenhum parâmetro (sem ser o nome do arquivo origem e do destino) se você simplesmente usar o FTPClient; se estiver precisando de algum parâmetro, aí você precisa ver que raios de parâmetros são esses, e ver quais são os comandos do FTPClient que podem ser necessários para enviá-los.
Por exemplo, se você precisa setar alguma opção como binária (que normalmente é o caso para transmitir arquivos, senão eles costumam chegar corrompidos) você deve usar alguma opção como “FTP.FTP_BINARY_FILE_TYPE”.
Para mandar comandos, use sendCommand ( http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTP.html#sendCommand(java.lang.String) )
http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html

A

Obrigado entanglement, vou dar uma olhada em tudo com calma.

Grato!

A

Esse seria o comandando correto a ser enviado pelo sendCommand(“put 03112010 tllib01(03112010)”);

E

O primeiro é o nome do arquivo-origem (“03112010”) e o segundo, o nome do arquivo-destino (“tllib01(03112010)”), pelo que imagino.

Esse nome é bem curioso, parece que você está fazendo FTP para algum sistema operacional esquisito . Que sistema operacional está usando nomes de arquivos com parênteses?

Ou é um Unix ou Windows mesmo (onde o “(” é um caracter válido para nomes de arquivos, embora seja pouco usado porque parece uma pontuação)?

Você teria de usar o método “put” mesmo, já que sendCommand serve apenas para alguns comandos especiais que são dependentes do FTP server.

E

Olá

Eu não sei se isso te ajuda mas não custa tentar
http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html
Método: sendSiteCommand(String arguments)

Esse cara é executado do próprio cliente FTP e retorna um boolean caso a operação seja executada com sucesso.
Da uma olhada melhor na API e ve se te ajuda

Abraços
Emerson

Criado 9 de julho de 2010
Ultima resposta 12 de jul. de 2010
Respostas 8
Participantes 5