Java + DropBox

4 respostas
dropboxjava
Rafael_Victor

Salve galerinha!

Hoje implementei no meu projeto java swing o DropBox para fazer upload do arquivo do banco de dados (HSQLDB) embedded para nuvem.

Ocorreu tudo certo, consegui salvar o arquivo, porém queria saber se existe algum metódo ou api que possa evitar ter que gerar o código toda hora, que deixe o código fixo?

E se é possível fazer o upload de arquivo com o mesmo nome, fazer tipo um update ou deletar o arquivo existente e salvar um novo?
Ação do meu botão de Backup:

DbxRequestConfig config = DbxRequestConfig.newBuilder("dropbox/java-tutorial").build();
        DbxClientV2 client = new DbxClientV2(config, ACCESS_TOKEN);
        boolean check = false;
        
        FullAccount account;
        try {
        account = client.users().getCurrentAccount();
        System.out.println(account.getName().getDisplayName());
    } catch (DbxException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    }
    
    ListFolderResult result;
    try {
        result = client.files().listFolder("");
        while (true) {
        for (Metadata metadata : result.getEntries()) {
            if(metadata.getName().equals("bdbkp.txt")){
                System.out.println("ok");
            }else{
                System.out.println("Nenhum arquivo encontrado");
            }
        }

        if (!result.getHasMore()) {
            break;
        }
    }
        result = client.files().listFolderContinue(result.getCursor());
    }       catch (DbxException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    }
    
    
try (InputStream in = new FileInputStream("bd/bdext.script")) {
    FileMetadata metadata = client.files().uploadBuilder("/bdbkp.txt").uploadAndFinish(in);
    metadata.equals(0);
    }catch (FileNotFoundException ex) {    	
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    } catch (DbxException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    }

4 Respostas

Lucas_Camara

Que código eh esse? O token?

Rafael_Victor

Isso amigo, esse token é gerado no site do dropbox

Lucas_Camara

Por questão de segurança, esse token deve possuir um tempo para expirar, por isso deve ser gerado de tempos em tempos. Nunca fiz integração com dropbox, mas pelo que conheço desses tokens (JWT ou qualquer outro) acho difícil permanecer um token fixo para esse tipo de coisa.

Provavelmente você terá que gerar esse token sempre que for necessário.

Rafael_Victor

Entendi, imaginei isso mesmo, procurei na documentação e fóruns e não achei nada a respeito.
Então desenvolvi dois JOptionPane, um pra inserção do token e o outro pra inserção do nome do arquivo.

private void jMenuItem15ActionPerformed(java.awt.event.ActionEvent evt) {                                            
    ACCESS_TOKEN = JOptionPane.showInputDialog("Insira aqui o Token de acesso do DropBox: ");
    DbxRequestConfig config = DbxRequestConfig.newBuilder("dropbox/java-tutorial").build();
    DbxClientV2 client = new DbxClientV2(config, ACCESS_TOKEN);
    String nome_arq = null;
    
    FullAccount account;
    try {
        account = client.users().getCurrentAccount();
        System.out.println(account.getName().getDisplayName());
        nome_arq = JOptionPane.showInputDialog("Você está conectado com "+account.getName().getDisplayName()+". Insira o nome do arquivo de backup: ");
    } catch (DbxException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(this, "Token expirado ou incorreto, tente novamente!");
        return;
    }
    
    ListFolderResult result;
    try {
        result = client.files().listFolder("");
        while (true) {
        for (Metadata metadata : result.getEntries()) {
            if(metadata.getName().equals(nome_arq)){
                JOptionPane.showMessageDialog(this, "Já existe um arquivo com esse mesmo nome!");
                return;
            }
        }

        if (!result.getHasMore()) {
            break;
        }
    }
        result = client.files().listFolderContinue(result.getCursor());
    }       catch (DbxException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    }
    
    
try (InputStream in = new FileInputStream("bd/bdext.script")) {
    FileMetadata metadata = client.files().uploadBuilder("/"+nome_arq+".txt").uploadAndFinish(in);
    metadata.equals(0);
    JOptionPane.showMessageDialog(this, "Arquivo salvo com sucesso no DropBox!");
    }catch (FileNotFoundException ex) {    	
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    } catch (DbxException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    }    	
}
Criado 23 de abril de 2019
Ultima resposta 24 de abr. de 2019
Respostas 4
Participantes 2