Я получаю асинхронные загрузки файлов из заполненных сообщений формы пользователя [используя инструмент, использующий iframes]] Я делаю на странице формы, настраивающей поле со скрытым GUID, который я передаю в iframe вСтрока запроса.Затем страница iframe обрабатывает загрузку, используя базовый метод, в соответствии с которым первые 2 знака guid для каталога и следующие 2 для подкаталога, в основном, для предотвращения тысяч файлов в 1 каталоге.
Myпроблема в этомЕсли пользователь загружает изображение и никогда не отправляет форму, файл должен быть удален. Я думаю об использовании объекта кэша, поскольку это среда с одним сервером.Таким образом, после публикации файла страница загрузки файла проверяет объект кэша на предмет postid. Если он находит его, он удаляет существующий файл [они загрузили файл, затем изменил его на новый], он записывает новый файл на диск.Моя проблема в том, что если они загрузят файл и просто никогда не отправят форму, мне нужно удалить файл.Я предполагаю, что могу использовать делегата в объекте кеша, чтобы это исправить?Примерно так: если форма отправляет, она делает недействительным объект кеша, поэтому срок его действия не истекает, и записывает его в базу данных как хороший файл, а если нет, то через 20 минут объект кеша удаляет любое имя файла в своем ключе.Вот код, который у меня есть до сих пор
protected void Page_Load(object sender, EventArgs e)
{
string PostID = Request.QueryString["a"];
HttpFileCollection hfc = Request.Files;
for (int i = 0; i < hfc.Count; i++)
{
HttpPostedFile hpf = hfc[i];
if (hpf.ContentLength > 0)
{
if (Cache[PostID] != null)
{
File.Delete(Server.MapPath("~/Uploads/") +
Cache[PostID].ToString().Substring(0,2) +
Cache[PostID].ToString().Substring(2,2) + "/" + Cache[PostID].ToString());
}
System.IO.FileInfo fe = new System.IO.FileInfo(PostID);
string extension = fe.Extension;
string Directory1 = PostID.Substring(0, 2);
string Directory2 = PostID.Substring(2, 2);
if (!Directory.Exists(Server.MapPath("~/Uploads/") +
Directory1))
{
Directory.CreateDirectory(Server.MapPath("~/Uploads/") +
Directory1);
}
if (!Directory.Exists(Server.MapPath("~/Uploads/") +
Directory1 + "/" + Directory2)) {
Directory.CreateDirectory(Server.MapPath("~/Uploads/") +
Directory1 + "/" + Directory2);
}
hpf.SaveAs(Server.MapPath("~/Uploads/") +
Directory1 + "/" + Directory2 + "/" +
PostID + "." + extension);
Cache.Insert("PostID",
PostID + extension,
null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
TimeSpan.FromMinutes(20));
}
}