powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Теоретический вопрос: доступ к файлу во время его загрузки?
10 сообщений из 10, страница 1 из 1
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39184192
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, меня интересует следующее.

Есь небольшой сервис на нем должен бегать FileWatcher. Этот наблюдатель следит за фтп-хранилищем.
И нужно записать название и размер файла в БД только после того как он загрузится полностью.

Как ведет себя java.nio.file.WatchService когда он видит изменения в папке? Он просигнализирует только после полной загрузки файла или сразу же как только появится его часть? Можно как-то проверять не пишет ли кто в файл и так д, чтоб убедиться, что файл полностью загружен,

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

Очень надеюсь, что мой вопрос понятен - заранее благодарю за подсказки.
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39184212
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_Можно как-то проверять не пишет ли кто в файл и так д, чтоб убедиться, что файл полностью загружен,
Тут присутствует некоторая логическая ошибка. Если в файл никто не пишет, это ещё не значит что он полностью загружен.
По теме много полезного тут
http://stackoverflow.com/questions/17933557/how-to-tell-when-a-file-is-done-copying-into-a-watched-directory
WatchService посылает разные события на создание и на модификацию (запись).

Для определения того пишет ли кто файл, можно попробовать FileLock
https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html

Ещё в обсуждении по ссылке, есть пример либы, которая использует таймаут. Если размер файла долго не менялся, считает аплоад завершенным.
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39184221
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FTP выглядит крайне не эффективным решением для передачи файлов. IMHO
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39184226
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_, между отправителем и получателем должен быть какой-то формальный
протокол финализации отправки. Например прислать в догонку md5.txt
или снять какой нибудь .lock c таким же именем.

В противном случае, при передаче текстового файла в общем случае у нас нет
никакой возможности проверить залит он до конца или нет.

FileWatcher - это интересный механизм. Он может помочь в минимизации
количества проверок хранилища но он вряд-ли избавит нас от самой главной
проверки. Проверки на целостность.

Кстати это один из краеугольных камней криптографии. Удостовериться
что месседж целый.
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39184247
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, - Спасибо за наводку, посмотрю.

Leonid KudryavtsevFTP выглядит крайне не эффективным решением для передачи файлов. IMHO - да, согласен. но ФТП будет как вспомогательный сервис. (Если к примеру сервер ляжет или что-то в этом роде)
Если например сервис лежит, то грузить файлы ФТП.

Файлы хочу передавать на обычный Jboss с бегающим там сервисом.
Правда не могу пока представить, какие ресурсы ему нужны для того, чтоб скажем.. обрабатывать 100 или 1000 клиентов одновременно. Планирую протестировать нагрузку с JMeter или чем-то подобным. Но перед хочу обдумать имплементацию.

Может поделится кто опытом? Текстовые Файлы до 5Мб.

mayton - и вам спасибо за ответ.
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39184256
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_Этот наблюдатель следит за фтп-хранилищем.
И нужно записать название и размер файла в БД только после того как он загрузится полностью.
Сам по себе FTP протокол не обеспечивает атомарности закачки. Но есть отдельные сервера и отдельные клиенты, в которых эта фича есть. http://www.google.кг/search?nord=1&q=FTP atomic upload
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39184266
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov_webdev_Этот наблюдатель следит за фтп-хранилищем.
И нужно записать название и размер файла в БД только после того как он загрузится полностью.
Сам по себе FTP протокол не обеспечивает атомарности закачки. Но есть отдельные сервера и отдельные клиенты, в которых эта фича есть. http://www.google.кг/search?nord=1&q=FTP atomic upload - Очень интересно, не знал. Тогда делаю вывод, что upload производить с помощью сервиса, а если уж сервис грохнется по каким-то причинам, то просто upload не будет работать, а download будет с помощью ftp.
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39188481
alexei_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно, во всех нормальных файловых системах, операция move атомарна в рамках одного и того же тома.

Это значит, что если вы move файл из одной паки в другую на том же томе - то в новой папке он появится сразу и полностью, либо не появится вообще.

Т.е. простейшее решение вашей проблемы - клиент закачивает файл по FTP в какую-то временную папку, а потом делает FTP команду rename в папку которую наблюдает ваш процесс. При таком сценарии ваш процесс всегда будет иметь дело только с полностью закаченными фалами и вам вообще не надо ни о чем заботься :)
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39188490
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если какие-то сомнения в доставке есть, заюзайте active mq в своем проекте. Персистентные очереди создайте, и юзайте. Это решит много проблем, но правда это при особом желании конечно.
...
Рейтинг: 0 / 0
Теоретический вопрос: доступ к файлу во время его загрузки?
    #39188522
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Событие модификации посылается, когда ос увидела, что файл изменился. Если файл большой, то вы получите это событие несколько раз.

...и если был обрыв, а потом нечто с протоколом докачки докачало чуток, то будет еще >=1 событий модификации.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Теоретический вопрос: доступ к файлу во время его загрузки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]