|
|
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, меня интересует следующее. Есь небольшой сервис на нем должен бегать FileWatcher. Этот наблюдатель следит за фтп-хранилищем. И нужно записать название и размер файла в БД только после того как он загрузится полностью. Как ведет себя java.nio.file.WatchService когда он видит изменения в папке? Он просигнализирует только после полной загрузки файла или сразу же как только появится его часть? Можно как-то проверять не пишет ли кто в файл и так д, чтоб убедиться, что файл полностью загружен, Ведь может быть ситуация, что загрузка будет длиться час, а через пол часа оборвется и если WatchService просигнелизирует о новом файле, а он загрузится не полностью будет некорректно. Очень надеюсь, что мой вопрос понятен - заранее благодарю за подсказки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2016, 18:48 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
_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 Ещё в обсуждении по ссылке, есть пример либы, которая использует таймаут. Если размер файла долго не менялся, считает аплоад завершенным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2016, 19:08 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
FTP выглядит крайне не эффективным решением для передачи файлов. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2016, 19:27 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
_webdev_, между отправителем и получателем должен быть какой-то формальный протокол финализации отправки. Например прислать в догонку md5.txt или снять какой нибудь .lock c таким же именем. В противном случае, при передаче текстового файла в общем случае у нас нет никакой возможности проверить залит он до конца или нет. FileWatcher - это интересный механизм. Он может помочь в минимизации количества проверок хранилища но он вряд-ли избавит нас от самой главной проверки. Проверки на целостность. Кстати это один из краеугольных камней криптографии. Удостовериться что месседж целый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2016, 19:40 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, - Спасибо за наводку, посмотрю. Leonid KudryavtsevFTP выглядит крайне не эффективным решением для передачи файлов. IMHO - да, согласен. но ФТП будет как вспомогательный сервис. (Если к примеру сервер ляжет или что-то в этом роде) Если например сервис лежит, то грузить файлы ФТП. Файлы хочу передавать на обычный Jboss с бегающим там сервисом. Правда не могу пока представить, какие ресурсы ему нужны для того, чтоб скажем.. обрабатывать 100 или 1000 клиентов одновременно. Планирую протестировать нагрузку с JMeter или чем-то подобным. Но перед хочу обдумать имплементацию. Может поделится кто опытом? Текстовые Файлы до 5Мб. mayton - и вам спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2016, 20:11 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
_webdev_Этот наблюдатель следит за фтп-хранилищем. И нужно записать название и размер файла в БД только после того как он загрузится полностью. Сам по себе FTP протокол не обеспечивает атомарности закачки. Но есть отдельные сервера и отдельные клиенты, в которых эта фича есть. http://www.google.кг/search?nord=1&q=FTP atomic upload ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2016, 20:24 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov_webdev_Этот наблюдатель следит за фтп-хранилищем. И нужно записать название и размер файла в БД только после того как он загрузится полностью. Сам по себе FTP протокол не обеспечивает атомарности закачки. Но есть отдельные сервера и отдельные клиенты, в которых эта фича есть. http://www.google.кг/search?nord=1&q=FTP atomic upload - Очень интересно, не знал. Тогда делаю вывод, что upload производить с помощью сервиса, а если уж сервис грохнется по каким-то причинам, то просто upload не будет работать, а download будет с помощью ftp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2016, 20:39 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
Обычно, во всех нормальных файловых системах, операция move атомарна в рамках одного и того же тома. Это значит, что если вы move файл из одной паки в другую на том же томе - то в новой папке он появится сразу и полностью, либо не появится вообще. Т.е. простейшее решение вашей проблемы - клиент закачивает файл по FTP в какую-то временную папку, а потом делает FTP команду rename в папку которую наблюдает ваш процесс. При таком сценарии ваш процесс всегда будет иметь дело только с полностью закаченными фалами и вам вообще не надо ни о чем заботься :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 18:00 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
Если какие-то сомнения в доставке есть, заюзайте active mq в своем проекте. Персистентные очереди создайте, и юзайте. Это решит много проблем, но правда это при особом желании конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 18:06 |
|
||
|
Теоретический вопрос: доступ к файлу во время его загрузки?
|
|||
|---|---|---|---|
|
#18+
Событие модификации посылается, когда ос увидела, что файл изменился. Если файл большой, то вы получите это событие несколько раз. ...и если был обрыв, а потом нечто с протоколом докачки докачало чуток, то будет еще >=1 событий модификации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 19:08 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39188522&tid=2124287]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 339ms |

| 0 / 0 |
