JSch - criar pasta no servidor

Como criar uma pasta no servidor via JSch ?

sftpChannel.mkdir(caminhoPasta);

Exemplo: JSch - Java Secure Channel - Examples

1 curtida

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 !");
        }
    }