Создание публичных временных файлов со сроком действия

2

Я создаю небольшой webapp на win2003 с asp.net 2.0. Мне нужно создать небольшие файлы, которые, я полагаю, доступны для Интернета, и файлы, предположительно, должны иметь 10-минутное время истечения. Я не нашел никакой поддержки для этого в рамках, и мое другое решение, которое приходило в голову, состояло в том, чтобы иметь задание расписания, которое очищает файл за X-минутный. Но почему-то я думаю, что я не первый, кто столкнулся с этой проблемой, и задаюсь вопросом, есть ли другие интеллектуальные решения.

Спасибо заранее.

  • 0
    Является ли целью контроль доступа к файлам для удаленных пользователей?
Теги:
temporary-files

3 ответа

2
Лучший ответ

Не зная больше о том, почему вы это делаете, я думаю, что решение вашей внешней программы для очистки файлов - лучшее решение. Альтернативой может быть хранение "файлов" в базе данных и создание обработчика, который извлекает данные из базы данных, но только в том случае, если "файл" не истек. Затем вы можете планировать очистку задачи в базе данных гораздо реже и по-прежнему обслуживать только "файлы", которые не истекли. Создание их на диске заставит вас выполнять очистку по регулярному расписанию, чтобы гарантировать, что истекшие элементы больше не доступны.

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

0

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

Вероятно, это не очень хорошая идея для большого сайта.

0

Является ли целью управлять доступом к файлам удаленным пользователям?

Вы можете создать приложение службы Windows или запланированное консольное приложение для периодического удаления устаревших каталогов/файлов. В качестве альтернативы, вы можете настроить управление файлом на веб-приложение, а не напрямую ссылаться на файлы с вашей веб-страницы. После того, как файл пройдёт через определенный возраст, просто введите код приложения, чтобы просто не вернуть файл.

Вот что-то похожее на то, что я делал в прошлом

protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = @"c:\SecureDirectory\DownloadableFile.txt";
            int exipireMinutes = -10;

            if (System.IO.File.Exists(fileName) && System.IO.File.GetCreationTime(fileName) >= DateTime.Now.AddMinutes(exipireMinutes))
            {
                byte[] fileBinary;
                using (System.IO.FileStream fs = System.IO.File.Open(Server.MapPath(fileName), System.IO.FileMode.Open))
                {
                    fileBinary = new byte[fs.Length];
                    fs.Read(fileBinary, 0, Convert.ToInt32(fs.Length));
                }
                Response.AddHeader("Content-disposition", "attachment; filename=" + fileName);
                Response.ContentType = "application/octet-stream";
                Response.BinaryWrite(fileBinary);
                Response.End();
            }
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню