Как переименовать файл при использовании «переместить» в URL в Apache Camel - PullRequest
0 голосов
/ 31 октября 2018

У меня есть URL как url = "file: D: / inputFolder? move = D: / outputFolder". мы создаем этот URL динамически. Я хочу переименовать файл во время перемещения, поэтому я сделал что-то вроде этого url = "file: D: / inputFolder? move = D: /outputFolder&fileName=abc.txt". Но я думаю, что move и fileName не работают вместе, это не переименование.

Есть ли альтернатива для этого? Пожалуйста, помните, что я хочу только с "двигаться". Я не могу также использовать .setHeader (..).

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Два возможных способа достижения вашей цели.

  1. Используйте как "потребитель", так и "производитель"

Используя этот способ, вы можете свободно контролировать, где и как можно установить пункт назначения, а также можете свободно управлять именем файла с использованием процессора / компонента.

    from("file:D:/inputFolder")
        .to("file:D:/outputFolder?fileName=abc.txt")
  1. Использовать только "потребитель"

Используя этот способ, вы рассматриваете свою работу как источник контроля данных. Это можно использовать, когда ваш файл будет перемещаться на одном диске. Недостатком является ограниченный шаблон переименования имени файла (см. язык файла верблюда )

    from("file:D:/inputFolder?move=${file:parent}/../outputFolder/abc.txt")
0 голосов
/ 31 октября 2018

Hy,

Насколько я понимаю, вы пытаетесь переместить файл за один раз.
Это не совсем так, как работает верблюд.

Идея верблюда состоит в том, чтобы иметь «потребителя» и «производителя», где потребитель загружает данные (например, ваш файл), а производитель помещает данные куда-то (например, сохраняет файл в папку)

Как говорится, вот что сработало для меня с Java-маршрутом:

from("file:/home/chris/temp/camel/in")
    .to("file:/home/chris/temp/camel/out/?fileName=test.txt");

Часть from настраивает папку, в которой верблюд ищет новые файлы. Несколько замечаний по этому поводу:

  • Файловый компонент проверяет папку каждые 0,5 секунды на наличие новых файлов. Это можно изменить с помощью параметра delay
  • Параметр noop настраивает, перемещается или копируется ли файл. По умолчанию он установлен на false, что означает, что он перемещен

В части to вы настраиваете, куда файл должен быть перемещен. Здесь вы можете использовать параметр fileName для переименования файла.
Будьте осторожны с этим, потому что установка параметра в URI напрямую делает его «статическим».
Под этим я подразумеваю, что единственный способ изменить параметр - это полностью перенастроить маршрут или перезапустить его, где ни один из них не является тем, что вы хотели бы сделать в обычном режиме.

Примечание 1:
Перемещение всех файлов, помещенных в одну папку, в один и тот же файл всегда переопределяет предыдущий файл по умолчанию.
Например, вы можете использовать параметр fileExists, чтобы всегда просто добавлять содержимое файла: fileExists=Append (подробности см. Верблюжий файл document )

Примечание 2: В компоненте file есть опция не "перемещать" файл, а копировать, переименовывать и удалять его, что иногда необходимо, когда вы хотите переместить его на другой диск, а простая копия не работает.
Также см. Документ для компонента верблюжьего файла для подробностей об этом.

Примечание 3: Вы можете иметь несколько операторов to() на одном маршруте, чтобы файл был перемещен в несколько мест. Например:

from("file:/home/chris/temp/camel/in")
    .to("file:/home/chris/temp/camel/out/?fileName=test.txt")
    .to("smtp:....");

Надеюсь, я смогу вам помочь и ответить на ваш вопрос.
Поздравил
Крис

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