Как заставить файл быть удаленным? Windows Server 2008 - PullRequest
0 голосов
/ 12 марта 2010

На моем сайте пользователь может загрузить файл (фото, ZIP, аудио, видео, что угодно). Затем он может решить заменить его более новой редакцией. Этот пользователь может загрузить файл, сделать сообщение, а затем принять решение создать новую ревизию, заменив старую (скажем, это большой файл zip или tar.gz). Существует большая вероятность, что люди могут скачать его, если он разослал электронное письмо или даже им для домашнего пользователя.

Проблема. Мне нужно заменить файл, и люди могут загружаться, и может пройти несколько минут, прежде чем он будет удален. Я не хочу, чтобы мой код зависал до тех пор, пока я не смогу удалять или проверять каждую секунду, чтобы увидеть, не используется ли он (особенно плохо, если другой пользователь может начать, и он долго создает цикл).

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

Ответы [ 3 ]

4 голосов
/ 12 марта 2010

Как насчет косвенной ссылки на файлы?

Сценарий сопоставления, отображает запись виртуального файла с вашего сайта в реальный файл. Если пользователь хочет загрузить новую версию своего файла, вы просто обновляете отображение, а не реальный файл.

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

3 голосов
/ 12 марта 2010

ответ Лаюетты правильный, самое простое решение - обойти блокировку файлов в целом:

  1. Когда пользователь загружает файл foo.zip , внутренне сохраните его как foo-v1.zip .
  2. Создайте файл отображения (база данных, код и т. Д.), Который сопоставляет foo.zip с foo-v1.zip .
  3. Вместо того, чтобы предоставлять прямую ссылку на файл, предоставьте ссылку на службу, которая получает файл: mysite.com / Download? Foo.zip или что-то в этом роде. Этот сервис использует сопоставление, чтобы определить, какую версию файла следует отправить клиенту.
  4. При загрузке новой версии создайте foo-v2.zip и обновите файл сопоставления.

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

1 голос
/ 12 марта 2010

Если вы против базы данных и если имена файлов имеют фиксированный формат (например, user / id.ext), вы можете добавить идентификатор с номером редакции и перечислить папку, используя шаблон (user / id- *) и используйте последнюю версию.

...