Como criar uma pasta no servidor via JSch ?
Fiz assim
@Transactional
public String importar(final File arquivo, final TipoArquivoServidorEnum tipo, final TipoArquivoImportacaoEnum tipoImportacao) {
try {
final String caminhoServidor = tipo.getDescricao() + tipoArquivo + tipoImportacao.getDescricao();
final Pair<ChannelSftp, Session> retorno = conectar();
final Session session = retorno.getRight();
final ChannelSftp sftpChannel = retorno.getLeft();
criarPastasServidor(caminhoServidor, sftpChannel);
sftpChannel.put(arquivo.getPath(), caminhoServidor + arquivo.getName());
desconectar(session, sftpChannel);
return caminhoServidor;
} catch (final SftpException e) {
log.error(e.getMessage(), e);
throw new GeralException("Erro ao salvar arquivo no servidor !");
}
}
private void criarPastasServidor(final String caminhoServidor, final ChannelSftp sftpChannel) throws SftpException {
final String[] folders = caminhoServidor.split("/");
for (final String folder : folders) {
if (folder.length() > 0) {
try {
sftpChannel.cd(folder);
} catch (final SftpException e) {
sftpChannel.mkdir(folder);
sftpChannel.cd(folder);
}
}
}
}
Só que dá erro
com.jcraft.jsch.SftpException: No such file
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:594)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365)
at br.com.ghnetsoft.gestaovendasatendimento.crud.service.ServidorArquivoService.importar(ServidorArquivoService.java:51)
O que pode ser ?
O erro dá quando executa esta linha sftpChannel.put(arquivo.getPath(), caminhoServidor + arquivo.getName());
Acho que talvez vc possa está complicando um pouco essa criação de pasta. Em vez de ir navegando até a pasta onde deseja criar um novo diretório, talvez vc consiga acessar a pasta diretamente (igual é feito no terminal), ex.:
- Criar a pasta pasta1 no caminho /pastaA/pastaB/pastaC:
private void criarNovaPasta(
final ChannelSftp sftpChannel,
final String caminhoServidor,
final String novaPasta,
) throws SftpException {
sftpChannel.cd(caminhoServidor);
sftpChannel.mkdir(novaPasta);
}
e a chamada ao método:
criarNovaPasta(sftpChannel, "/pastaA/pastaB/pastaC", "pasta1");
1 curtida
Não entendi o que estou fazendo.
final String caminhoServidor = tipo.getDescricao() + tipoArquivo;
- Assim funciona, ficando assim: publico/desenvolvimento/movimentoneem_12234450888165827176.jpeg
final String caminhoServidor = tipo.getDescricao() + tipoArquivo + tipoImportacao.getDescricao();
- Assim não funciona, ficando assim: publico/desenvolvimento/carousel/movimentoneem_12234450888165827176.jpeg
@Transactional
public String importar(final File arquivo, final TipoArquivoServidorEnum tipo, final TipoArquivoImportacaoEnum tipoImportacao) {
try {
final String caminhoServidor = tipo.getDescricao() + tipoArquivo;
final Pair<ChannelSftp, Session> retorno = conectar();
final Session session = retorno.getRight();
final ChannelSftp sftpChannel = retorno.getLeft();
sftpChannel.cd(caminhoServidor);
sftpChannel.mkdir(caminhoServidor);
final String arquivoCompleto = caminhoServidor + arquivo.getName();
sftpChannel.put(arquivo.getPath(), arquivoCompleto);
desconectar(session, sftpChannel);
return arquivoCompleto;
} catch (final SftpException e) {
log.error(e.getMessage(), e);
throw new GeralException("Erro ao salvar arquivo no servidor !");
}
}