Как записать байт или поток на Apache Camel FTP для передачи файла - PullRequest
0 голосов
/ 30 ноября 2018

В моем коде в настоящее время я получаю данные из базы данных, а затем записываю файл из данных.У меня есть такой верблюжий маршрут и рабочее решение: -

private static final String INPUT_FILE_DIRECTORY_URI = "file:" + System.getProperty("user.home")
        + "/data/cdr/?noop=false";

private static final String SFTP_SERVER = "sftp://" +System.getProperty("user.name")
        + "@sftp_server_url/data/cdr/?privateKeyFile=~/.ssh/id_rsa&passiveMode=true";

from(INPUT_FILE_DIRECTORY_URI)
            .streamCaching()
            .log("Sending file to local sftp")
            .to(SFTP_SERVER); 

Я не хочу записывать файл на локальный диск.Вместо этого я хочу записать данные файла непосредственно на сервер SFTP.Я не знаю как это сделать?Но я думаю, что это должно быть возможно сделать.Можете ли вы сказать мне, возможно ли это?Если да, то как это сделать?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Мне удалось решить эту проблему по-другому.Это больше подходит для моей конкретной проблемы.

             byte[] csvData = csvStringBuilder.toString().getBytes();
             Routes.withProducer(producer)
                    .withHeader(Exchange.FILE_NAME, myCsvFile.csv)
                    .withBody(csvData)
                    .to(SFTP_SERVER).request(byte[].class);
0 голосов
/ 04 декабря 2018

Вы не должны использовать streamCaching, если вы действительно не используете его.Он хранит ваш файл в памяти, используйте его, если вам нужно многократно потреблять ваш ввод.

Вы можете использовать Компонент Jpa или пользовательский компонент, получающий ваши данные.Загрузите его из базы данных и затем отправьте на ваш ftp-сервер.

С Jpa:

@Entity 
@NamedQuery(name = "data", query = "select x from Data x where x.id = 1") 
public class Data { ... }

После этого вы можете определить URI потребителя, как этот:

from("jpa://org.examples.Data?consumer.namedQuery=data")
.to("SFTP_SERVER");

РЕДАКТИРОВАТЬ: преобразовать список в CSV и отправить его по FTP:

from("jpa://org.examples.Data?consumer.namedQuery=data")
.marshal()
.csv()
.to("sftp://" +System.getProperty("user.name") + 
"@sftp_server_url/data/cdr/myFile.csv?" +"privateKeyFile=~/.ssh/id_rsa&passiveMode=true");

См. CSV компонент , которые преобразуют список в CSV-файл.

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