|
|
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
Добрый день! Как можно удалить файл, который раздается клиентам по httpservletoutputstream так чтобы как-бы те кто уже получил часть байт докачал до конца? (размер файла ~ 1-4 Гб) кроме как вести счетчик (плохо)? А вообще FileOutputStream он как внутри работает? Он никаких локов на файл я так понял не ставит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2015, 14:41 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
Клиенты отправляют Range Requests с Range header Range: bytes=0-1024 Кто просит начало файла, тому не отдавать. Только надо как-то отслеживать, сколько клиентов уже начали закачку, чтобы определить момент удаления файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2015, 15:20 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
А имхо ведь эти заголовки не обязательны (возможно всякие download manager'ы их и используют), браузер когда посылает GET запрос - откуда он знает что там в ответе прийдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 17:13 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
no56892Как можно удалить файл, который раздается клиентам по httpservletoutputstream так чтобы как-бы те кто уже получил часть байт докачал до конца? (размер файла ~ 1-4 Гб) Можно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний. no56892кроме как вести счетчик (плохо)? Зачем счетчик? Есть 100500 вариантов решить подобную проблему. Нафига счетчик-то? no56892А вообще FileOutputStream он как внутри работает? Интересный вопрос. Какой на него ответ должен быть? Ссылку на реализацию дать, или что? Там никакой магии нет. Открывает файл через API операционки и читает его. no56892Он никаких локов на файл я так понял не ставит? Фига себе. Как это запись в файл и не ставит локов?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 17:23 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
авторМожно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний. Смысл? Его надо удалить, при том не испортить действующие скачивания. авторЗачем счетчик? Есть 100500 вариантов решить подобную проблему. Нафига счетчик-то? Например? А как отследить момент, когда файл можно удалять физически? (т.е. все скачали) авторИнтересный вопрос. Какой на него ответ должен быть? Ссылку на реализацию дать, или что? Там никакой магии нет. Открывает файл через API операционки и читает его. Да это понятно, не ясна только вот неопределенность, когда мы удаляем файл в процессе чтения из файла. Там ведь еще есть кэш файловой системы, и он как-бы рандомно записывает изменения на диск. Можно все докачать, а можно и нет. авторФига себе. Как это запись в файл и не ставит локов?? FileInputStream конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 17:54 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
В предыдущем посте я немного тупаную про кэш фс и сохр-я на диск - там полюбому вся работа через фс. Здесь вот пишут, что для Linux можно удалять в процессе чтения - дескриптор остается, а вот относительно кроссплатформенности? Я что-то не уверен что на других ОС на это можно полагаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 18:02 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
Т.е. примерно будет так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. markedToDelete - лезем в базу и смотрим удален ли файл (удаляют из админки). При удалении из админки - запускаем задание в шедулер, которое проверяет периодически счетчик, если = 0, то удаляет файл окончательно и завершается. Я вот как раз и хотел может есть что-то еще как сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 18:26 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
no56892авторМожно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний. Смысл? Его надо удалить, при том не испортить действующие скачивания. Ну, так его нельзя сразу удалить. Потому что тогда прервутся активные чтения. Нужно удалить потом и запретить все новые чтения. И то и другое можно реализовать разными способами. no56892Например? А как отследить момент, когда файл можно удалять физически? (т.е. все скачали) Можно самому ставить ReadLock. Можно просто заскедулить удаление на любой вразумительный период, например, час или день. "Кто не успел, то сам виноват". Можно ещё что-то изобрести, если знать предметную область. no56892Да это понятно, не ясна только вот неопределенность, когда мы удаляем файл в процессе чтения из файла. Там ведь еще есть кэш файловой системы, и он как-бы рандомно записывает изменения на диск. Можно все докачать, а можно и нет. "и рыбку съесть". Мне не понятна навязчивая идея удалять файл физически. no56892FileInputStream конечно Тоже должен ставить read lock на файл, или на сегмент файла. В общем, реализация зависит от ОС. Если нужны локи, то лучше напрямую и использовать API для них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 19:10 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
no56892markedToDelete - лезем в базу и смотрим удален ли файл (удаляют из админки). При удалении из админки - запускаем задание в шедулер, которое проверяет периодически счетчик, если = 0, то удаляет файл окончательно и завершается. Я вот как раз и хотел может есть что-то еще как сделать. Чем проще, там лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 19:11 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
автор"и рыбку съесть". Мне не понятна навязчивая идея удалять файл физически. Диск сервера быстро забъется уже не нужным контентом. авторчас или день. "Кто не успел, то сам виноват" Ну если народ платит за контент, то чисто формально он дожен иметь возможность его выкачивать хоть с 1бит/с коннектом. Ну кстати действительно, второй вариант через readlock, но от шедулера все-равно не избавиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 19:25 |
|
||
|
как удалить файл
|
|||
|---|---|---|---|
|
#18+
no56892Смысл? Его надо удалить, при том не испортить действующие скачиванияЧто тут думать-то? Сгенерировали клиенту уникальную ссылку вида схема://сервер/ресурс/идентификатор и контролируйте, кто и сколько забрал по каждой ссылке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2015, 18:39 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38995341&tid=2125229]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
143ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 470ms |

| 0 / 0 |
