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

Range: bytes=0-1024

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

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

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

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


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


no56892Он никаких локов на файл я так понял не ставит?
Фига себе. Как это запись в файл и не ставит локов??
...
Рейтинг: 0 / 0
как удалить файл
    #38995258
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний.
Смысл? Его надо удалить, при том не испортить действующие скачивания.
авторЗачем счетчик? Есть 100500 вариантов решить подобную проблему. Нафига счетчик-то?
Например? А как отследить момент, когда файл можно удалять физически? (т.е. все скачали)
авторИнтересный вопрос. Какой на него ответ должен быть? Ссылку на реализацию дать, или что? Там никакой магии нет. Открывает файл через API операционки и читает его.
Да это понятно, не ясна только вот неопределенность, когда мы удаляем файл в процессе чтения из файла. Там ведь еще есть кэш файловой системы, и он как-бы рандомно записывает изменения на диск. Можно все докачать, а можно и нет.
авторФига себе. Как это запись в файл и не ставит локов??
FileInputStream конечно
...
Рейтинг: 0 / 0
как удалить файл
    #38995269
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В предыдущем посте я немного тупаную про кэш фс и сохр-я на диск - там полюбому вся работа через фс. Здесь вот пишут, что для Linux можно удалять в процессе чтения - дескриптор остается, а вот относительно кроссплатформенности? Я что-то не уверен что на других ОС на это можно полагаться.
...
Рейтинг: 0 / 0
как удалить файл
    #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
как удалить файл
    #38995341
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892авторМожно "перенести" (не обязательно физически) файл туда где он не будет доступен для новых скачиваний.
Смысл? Его надо удалить, при том не испортить действующие скачивания.

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


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

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

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

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

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


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