2016-03-14 5 views
2

Как создать файл в удаленном каталоге с байта [], так как есть методы send(), доступные в PollableChannel. из ниже кода можно отправить файл на удаленный, но он создает файл на локальной машине. как избежать создания файла на локальной машине?spring SFTP create file in remote from byte []

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». может ли кто-нибудь указать мне, где я ошибаюсь

ответ

1

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

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

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

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

Дополнительная информация в Reference Manual и Samples.

UPDATE

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

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

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

+0

Спасибо, Артем, я обновил свою конфигурацию. – Rembo

+0

'RemoteFileTemplate.send (byte [])' подходит для моего требования, кроме имени файла, как установить 10.TXT? – Rembo

+0

Вам не нужно беспокоиться о 'RemoteFileTemplate'. ' ' именно для вас. Просто отправьте 'byte []' и прочитайте UPDATE в моем ответе. –