通过 Mirth 从 Dropbox 读取文件

Read Files From Dropbox through Mirth

我有一个要求,我需要读取存储在 dropbox 等站点中的 HL7v2 文件。一种方法是从该站点下载文件并通过 Mirth 通过 SFTP 访问它。

但是这个过程很乏味,想象一下我会在某个时间点生成 1000 个文件,手动下载所有这些数据并从 SFTP 获取它们会非常忙碌和耗时。 Mirth 3.4.2 社区版是否具有从云存储中获取数据的功能?或者可以通读 JavaScript reader?

如果可以通过 Mirth 实现,请告诉我。

我不确定 Dropbox 是否有任何类型的原生 FTP 或 SFTP 访问层,但它确实有 API 和 SDK:enter link description here

这是他们展示的示例代码片段:

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;