spring SFTP создать файл на удалении из байта []

как создать файл в удаленном каталоге из byte[], так как в PollableChannel доступны методы send(). из приведенного ниже кода можно отправить файл на удаленный компьютер, но он создает файл на локальном компьютере. как избежать создания файла на локальной машине?

PollableChannel remoteFileChannel = context.getBean("outputChannel", PollableChannel.class); 

Message<byte[]> sendFile = MessageBuilder.withPayload("hi how are you".getBytes()).build();

remoteFileChannel.send(sendFile);

весенняя конфигурация sftp:

<bean id="sftpSessionFactory"
        class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory"
        p:host="${sftp.host}"
        p:port="${sftp.port}"
        p:user="${sftp.username}"
        p:password="${sftp.password}"
        p:allowUnknownKeys="${sftp.allowUnknownKeys}" />

<int:channel id="outputChannel">
        <int:queue />
</int:channel>

<int-sftp:outbound-channel-adapter id="outboundAdapter"
        session-factory="sftpSessionFactory"
        channel="outputChannel"
        charset="UTF-8"
        remote-directory="${sftp.remotedir}"
        remote-filename-generator="randomFileNameGenerator" /> 

как создать файл со случайным именем и записать в него байты?

Я пробовал использовать пользовательский класс генератора имен файлов:

@Component("randomFileNameGenerator")
public class RandomFileNameGenerator implements FileNameGenerator {

    @Override
    public String generateFileName(Message<?> msg) {
        long number = (long) Math.floor(Math.random() * 90000000L) + 1000000L;
        String fileName = String.format("%d.txt", number);
        return fileName;
    }

}

где имя файла не было задано, создавая файл с именем типа «adas-asdfsadf-545sadf.msg». может ли кто-нибудь указать мне, где я делаю неправильно


person Abhishek Nayak    schedule 14.03.2016    source источник


Ответы (1)


Прежде всего, вы не показываете конфигурацию Spring Integration.

С другой стороны, непонятно, почему вы говорите «создает файл», если код выглядит как ваш. Итак, это вы создаете файл.

Существуют готовые компоненты, такие как <int-sftp:outbound-channel-adapter> и <int-sftp:outbound-gateway>, которые определенно могут решить вашу задачу.

Оба они основаны на операции RemoteFileTemplate.send(), которая очень хорошо обрабатывает byte[] payload.

Дополнительную информацию см. в Справочном руководстве и Примеры.

ОБНОВЛЕНИЕ

как создать файл со случайным именем и записать в него байты?

Мне кажется, мы с вами только что решили вопрос byte[].

Ре. «случайное имя». Похоже, вы идете по правильному пути: remote-filename-generator="fileNameGenerator" как раз для этой задачи. См. стратегию FileNameGenerator и ее реализации в Framework. Вы можете использовать свою функцию рандомизации в своей пользовательской реализации и ссылаться на нее из этого определения адаптера канала.

person Artem Bilan    schedule 14.03.2016
comment
Спасибо, Артем, я обновил свою конфигурацию. - person Abhishek Nayak; 14.03.2016
comment
RemoteFileTemplate.send(byte[]) подходит под мои требования, кроме имени файла, как поставить 10.TXT? - person Abhishek Nayak; 14.03.2016
comment
Вам не нужно беспокоиться о RemoteFileTemplate. ` ‹int-sftp:outbound-channel-adapter›` именно для вас. Просто отправьте byte[] и прочитайте ОБНОВЛЕНИЕ в моем ответе. - person Artem Bilan; 14.03.2016
comment
есть ли способ создать собственный класс FileNameGenerator? или генерировать случайное число с помощью языка выражений Spring? - person Abhishek Nayak; 14.03.2016
comment
??? Вам просто нужно написать свой собственный класс, который реализует FileNameGenerator, и зарегистрировать его как Spring <bean>. Да, вместо этого вы можете использовать remote-filename-generator-expression, если ваша логика достаточно проста. - person Artem Bilan; 14.03.2016
comment
Я пытался создать собственный класс генератора имен файлов, но не работал. я обновил вопрос. - person Abhishek Nayak; 14.03.2016
comment
Я не вижу никаких проблем в вашем коде. Было бы здорово, если бы вы могли отлаживать свой код и Spring Integration. - person Artem Bilan; 14.03.2016