Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как удалить файл / 11 сообщений из 11, страница 1 из 1
28.06.2015, 14:41
    #38994497
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
Добрый день!
Как можно удалить файл, который раздается клиентам по httpservletoutputstream так чтобы как-бы те кто уже получил часть байт докачал до конца? (размер файла ~ 1-4 Гб) кроме как вести счетчик (плохо)? А вообще FileOutputStream он как внутри работает? Он никаких локов на файл я так понял не ставит?
...
Рейтинг: 0 / 0
28.06.2015, 15:20
    #38994506
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
Клиенты отправляют Range Requests с Range header

Range: bytes=0-1024

Кто просит начало файла, тому не отдавать.

Только надо как-то отслеживать, сколько клиентов уже начали закачку, чтобы определить момент удаления файла.
...
Рейтинг: 0 / 0
29.06.2015, 17:13
    #38995225
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
А имхо ведь эти заголовки не обязательны (возможно всякие download manager'ы их и используют), браузер когда посылает GET запрос - откуда он знает что там в ответе прийдет?
...
Рейтинг: 0 / 0
29.06.2015, 17:23
    #38995233
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
no56892Как можно удалить файл, который раздается клиентам по httpservletoutputstream так чтобы как-бы те кто уже получил часть байт докачал до конца? (размер файла ~ 1-4 Гб)
Можно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний.

no56892кроме как вести счетчик (плохо)?

Зачем счетчик? Есть 100500 вариантов решить подобную проблему. Нафига счетчик-то?


no56892А вообще FileOutputStream он как внутри работает?
Интересный вопрос. Какой на него ответ должен быть? Ссылку на реализацию дать, или что? Там никакой магии нет. Открывает файл через API операционки и читает его.


no56892Он никаких локов на файл я так понял не ставит?
Фига себе. Как это запись в файл и не ставит локов??
...
Рейтинг: 0 / 0
29.06.2015, 17:54
    #38995258
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
авторМожно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний.
Смысл? Его надо удалить, при том не испортить действующие скачивания.
авторЗачем счетчик? Есть 100500 вариантов решить подобную проблему. Нафига счетчик-то?
Например? А как отследить момент, когда файл можно удалять физически? (т.е. все скачали)
авторИнтересный вопрос. Какой на него ответ должен быть? Ссылку на реализацию дать, или что? Там никакой магии нет. Открывает файл через API операционки и читает его.
Да это понятно, не ясна только вот неопределенность, когда мы удаляем файл в процессе чтения из файла. Там ведь еще есть кэш файловой системы, и он как-бы рандомно записывает изменения на диск. Можно все докачать, а можно и нет.
авторФига себе. Как это запись в файл и не ставит локов??
FileInputStream конечно
...
Рейтинг: 0 / 0
29.06.2015, 18:02
    #38995269
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
В предыдущем посте я немного тупаную про кэш фс и сохр-я на диск - там полюбому вся работа через фс. Здесь вот пишут, что для Linux можно удалять в процессе чтения - дескриптор остается, а вот относительно кроссплатформенности? Я что-то не уверен что на других ОС на это можно полагаться.
...
Рейтинг: 0 / 0
29.06.2015, 18:26
    #38995298
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
Т.е. примерно будет так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public void serveFile(HttpServletRequest req, HttpServletResponse res) {

		if(!markedToDelete(req.getParameter("file_id"))) {
			try(InputStream is = getFileIs(req.getParameter("file_id"))) {
				counter.incrementAndGet();
				IOUtils.copyLarge(is, res.getOutputStream());
			} catch (IOException ex) {

			} finally {
				counter.decrementAndGet();
			}
		}
	}


markedToDelete - лезем в базу и смотрим удален ли файл (удаляют из админки). При удалении из админки - запускаем задание в шедулер, которое проверяет периодически счетчик, если = 0, то удаляет файл окончательно и завершается.
Я вот как раз и хотел может есть что-то еще как сделать.
...
Рейтинг: 0 / 0
29.06.2015, 19:10
    #38995341
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
no56892авторМожно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний.
Смысл? Его надо удалить, при том не испортить действующие скачивания.

Ну, так его нельзя сразу удалить. Потому что тогда прервутся активные чтения. Нужно удалить потом и запретить все новые чтения.
И то и другое можно реализовать разными способами.


no56892Например? А как отследить момент, когда файл можно удалять физически? (т.е. все скачали)

Можно самому ставить ReadLock. Можно просто заскедулить удаление на любой вразумительный период, например, час или день. "Кто не успел, то сам виноват". Можно ещё что-то изобрести, если знать предметную область.

no56892Да это понятно, не ясна только вот неопределенность, когда мы удаляем файл в процессе чтения из файла. Там ведь еще есть кэш файловой системы, и он как-бы рандомно записывает изменения на диск. Можно все докачать, а можно и нет.

"и рыбку съесть". Мне не понятна навязчивая идея удалять файл физически.

no56892FileInputStream конечно
Тоже должен ставить read lock на файл, или на сегмент файла. В общем, реализация зависит от ОС. Если нужны локи, то лучше напрямую и использовать API для них.
...
Рейтинг: 0 / 0
29.06.2015, 19:11
    #38995343
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
no56892markedToDelete - лезем в базу и смотрим удален ли файл (удаляют из админки). При удалении из админки - запускаем задание в шедулер, которое проверяет периодически счетчик, если = 0, то удаляет файл окончательно и завершается.
Я вот как раз и хотел может есть что-то еще как сделать.
Чем проще, там лучше.
...
Рейтинг: 0 / 0
29.06.2015, 19:25
    #38995355
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
автор"и рыбку съесть". Мне не понятна навязчивая идея удалять файл физически.
Диск сервера быстро забъется уже не нужным контентом.
авторчас или день. "Кто не успел, то сам виноват"
Ну если народ платит за контент, то чисто формально он дожен иметь возможность его выкачивать хоть с 1бит/с коннектом.
Ну кстати действительно, второй вариант через readlock, но от шедулера все-равно не избавиться.
...
Рейтинг: 0 / 0
30.06.2015, 18:39
    #38996278
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить файл
no56892Смысл? Его надо удалить, при том не испортить действующие скачиванияЧто тут думать-то?
Сгенерировали клиенту уникальную ссылку вида схема://сервер/ресурс/идентификатор и контролируйте, кто и сколько забрал по каждой ссылке.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как удалить файл / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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