2017-03-26 3 views
0

J'ai une exigence où j'ai besoin de lire les fichiers HL7v2 stockés dans des sites comme Dropbox. Une façon de faire est de télécharger le fichier depuis ce site et d'y accéder via SFTP via Mirth.Lire des fichiers de Dropbox à travers Mirth

Mais ce processus est fastidieux, imaginez que je vais avoir des milliers de fichiers générés à un moment donné et il sera très mouvementé et fastidieux de télécharger manuellement toutes ces données et de les récupérer auprès de SFTP. Est-ce que la version communautaire de Mirth 3.4.2 a cette capacité d'extraire les données du stockage en nuage? ou possible de lire à travers le lecteur JavaScript?

S'il vous plaît laissez-moi savoir si c'est réalisable via Mirth.

Répondre

1

Je ne suis pas sûr si Dropbox a une sorte de couche d'accès FTP natif ou SFTP, mais il a une API et SDK: enter link description here

Voici l'extrait de code exemple, ils montrent:

import com.dropbox.core.DbxException; 
import com.dropbox.core.DbxRequestConfig; 
import com.dropbox.core.v2.DbxClientV2; 
import com.dropbox.core.v2.files.FileMetadata; 
import com.dropbox.core.v2.files.ListFolderResult; 
import com.dropbox.core.v2.files.Metadata; 
import com.dropbox.core.v2.users.FullAccount; 

import java.util.List; 

import java.io.FileInputStream; 
import java.io.InputStream; 
import java.io.IOException; 

public class Main { 
    private static final String ACCESS_TOKEN = "<ACCESS TOKEN>"; 

    public static void main(String args[]) throws DbxException, IOException { 
     // Create Dropbox client 
     DbxRequestConfig config = new DbxRequestConfig("dropbox/java-tutorial", "en_US"); 
     DbxClientV2 client = new DbxClientV2(config, ACCESS_TOKEN); 

     // Get current account info 
     FullAccount account = client.users().getCurrentAccount(); 
     System.out.println(account.getName().getDisplayName()); 

     // Get files and folder metadata from Dropbox root directory 
     ListFolderResult result = client.files().listFolder(""); 
     while (true) { 
      for (Metadata metadata : result.getEntries()) { 
       System.out.println(metadata.getPathLower()); 
      } 

      if (!result.getHasMore()) { 
       break; 
      } 

      result = client.files().listFolderContinue(result.getCursor()); 
     } 

     // Upload "test.txt" to Dropbox 
     try (InputStream in = new FileInputStream("test.txt")) { 
      FileMetadata metadata = client.files().uploadBuilder("/test.txt") 
       .uploadAndFinish(in); 
     } 
    } 
} 

Cela se traduit facilement dans un script JavaScript lecteur:

var accessToken = '<ACCESS TOKEN>'; 

// Create Dropbox client 
var config = new com.dropbox.core.DbxRequestConfig("dropbox/java-tutorial", "en_US"); 
var client = new com.dropbox.core.v2.DbxClientV2(config, accessToken); 

// Get files and folder metadata from Dropbox root directory 
var request = client.files(); 
var listResult = request.listFolder(''); 
var messages = new java.util.ArrayList(); 

while (true) { 
    for each (metadata in listResult.getEntries().toArray()) { 
     if (metadata instanceof com.dropbox.core.v2.files.FileMetadata) { 
      try { 
       var sourceMap = new java.util.HashMap(); 
       sourceMap.put('originalFilename', metadata.getName()); 
       sourceMap.put('fileDirectory', org.apache.commons.lang3.StringUtils.removeEndIgnoreCase(metadata.getPathLower(), metadata.getName())); 
       sourceMap.put('fileSize', metadata.getSize()); 
       sourceMap.put('fileLastModified', metadata.getServerModified()); 
       sourceMap.put('dropboxId', metadata.getId()); 

       var baos = new java.io.ByteArrayOutputStream(); 
       var result = request.download(metadata.getId()).download(baos); 

       if (result && result.getId() == metadata.getId()) { 
        messages.add(new RawMessage(baos.toByteArray(), null, sourceMap)); 
       } 
      } catch (e) { 
       logger.error('Error downloading file: ' + metadata.getPathLower(), e.javaException); 
      } 
     } 
    } 

    if (!listResult.getHasMore()) { 
     break; 
    } 

    listResult = request.listFolderContinue(listResult.getCursor()); 
} 

return messages; 
+0

Salut Nick, J'ai essayé de modifier un execute votre code. Cela fonctionne bien. Merci pour l'aide –