Четете файлове от Dropbox през Mirth

Имам изискване, при което трябва да прочета HL7v2 файловете, съхранявани в сайтове като dropbox. Един от начините да направите това е да изтеглите файла от този сайт и да получите достъп до него чрез SFTP чрез Mirth.

Но този процес е досаден, представете си, че ще имам 1000 файла, генерирани в даден момент и ще бъде много забързано и отнема много време ръчното изтегляне на всички тези данни и извличането им от SFTP. Версията на общността Mirth 3.4.2 има ли тази способност да извлича данните от облачно хранилище? или е възможно да се чете чрез JavaScript четец?

Моля, уведомете ме дали е постижимо чрез Mirth.


person Vibin Guevara    schedule 26.03.2017    source източник


Отговори (1)


Не съм сигурен дали Dropbox има някакъв собствен FTP или SFTP слой за достъп, но има API и SDK: въведете описание на връзката тук

Ето примерния кодов фрагмент, който показват:

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

Това лесно се превежда в скрипт на JavaScript Reader:

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;
person Nick Rupley    schedule 07.04.2017
comment
Здравей Ник, опитах се да променя и изпълня твоя код. Работи добре. Благодаря за помощта - person Vibin Guevara; 02.06.2017