Как извлечь InputStream из SmbRemoteFileTemplate? - PullRequest
0 голосов
/ 24 сентября 2019

Я использую Spring интеграции для SMB для хранения и получения файлов с сервера Windows.В случаях, когда я хочу получить файл с сервера, я нашел метод "get", который получает функцию lamda для обработки InputStream, но мне нужно вернуть этот элемент, и я не хотел бы хранить в локальном, а затем вернуть InputStream,Есть ли альтернатива в этом вопросе?

Спасибо всем.

Мой код такой:

@Override
    protected InputStream readMetadataFile(final String filename) throws FileNotFoundException {
        final File inputFile = new File(filename);
        if (this.smbRemoteFileTemplate.exists(filename)) {
            this.smbRemoteFileTemplate.get(filename, in -> FileUtils.copyInputStreamToFile(in, inputFile));
            return new FileInputStream(inputFile);
        }

        return null;
    }

PS: любой партнер с репутацией больше 1500 могсоздать тег "весна-интеграция-smb"?Еще раз спасибо.

1 Ответ

1 голос
/ 24 сентября 2019

RemoteFileTemplate основан на SessionFactory, и есть такой API:

/**
 * Obtain a raw Session object. User must close the session when it is no longer
 * needed.
 * @return a session.
 * @since 4.3
 */
Session<F> getSession();

Что Session имеет этот для вас:

/**
 * Retrieve a remote file as a raw {@link InputStream}.
 * @param source The path of the remote file.
 * @return The raw inputStream.
 * @throws IOException Any IOException.
 * @since 3.0
 */
InputStream readRaw(String source) throws IOException;

Будем надеяться, что этого пути достаточно для вашего варианта использования!

Примечание: вы несете ответственность за закрытие этого InputStream после использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...