2013-05-24 2 views
2

Мой код как этоткак сделать код выполнить после response.end

HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ContentType = "application/pdf"; 
    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + "name" + ".pdf"); 
    HttpContext.Current.Response.TransmitFile("~/media/pdf/name.pdf"); 
    HttpContext.Current.Response.End(); 
    if (FileExists("/media/pdf/name.pdf")) 
    { 
     System.IO.File.Delete("D:/Projects/09-05-2013/httpdocs/media/pdf/name.pdf"); 
    } 

Здесь я хочу, чтобы загрузить name.pdf в браузере, и после загрузки я хочу о том, что удалить file.But код выполнение не останавливается на

HttpContext.Current.Response.End(); 

нет коды после того, как эта строка executed.so моей функции удаления не working.Is там никакой работы вокруг этого вопроса?

+1

положить этот код HttpContext.Current.Response.End(); после Delte(). Response.End() остановит выполнение цикла жизни страницы в asp.net –

+0

@AKS Какой фоновый рабочий? – nmat

+0

@nmat: это был ответ на другой комментарий. Я думаю, он удалил его – Athul

ответ

4

HttpResponse.End (согласно documentation) поднимает ThreadAbortException, и поскольку вы не пытаетесь справиться с этим, ваш метод выходит.

Я не уверен, почему именно вы должны использовать End(), но вы можете поместить код «cleanup» в оператор finally.

+0

changin End() to HttpContext.Current.Response.Flush(); help – Athul

1

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

Как упоминалось о Reponse.End довольно резким и окончательным ... подробнее здесь: Is Response.End() considered harmful?

только мои мысли о том, что ... =)

3
// Add headers for a csv file or whatever 
Response.ContentType = "text/csv" 
Response.AddHeader("Content-Disposition", "attachment;filename=report.csv") 
Response.AddHeader("Pragma", "no-cache") 
Response.AddHeader("Cache-Control", "no-cache") 

// Write the data as binary from a unicode string 
Dim buffer As Byte() 
buffer = System.Text.Encoding.Unicode.GetBytes(csv) 
Response.BinaryWrite(buffer) 

// Sends the response buffer 
Response.Flush() 

// Prevents any other content from being sent to the browser 
Response.SuppressContent = True 

// Directs the thread to finish, bypassing additional processing 
HttpContext.Current.ApplicationInstance.CompleteRequest() 
+0

Возможно, это поможет вам. –

1

У меня был тот же вопрос , попробуйте это: скопируйте в MemoryStream -> удалить файл -> скачать.

string absolutePath = "~/your path"; 
try { 
    //copy to MemoryStream 
    MemoryStream ms = new MemoryStream(); 
    using (FileStream fs = File.OpenRead(Server.MapPath(absolutePath))) 
    { 
     fs.CopyTo(ms); 
    } 

    //Delete file 
    if(File.Exists(Server.MapPath(absolutePath))) 
     File.Delete(Server.MapPath(absolutePath)) 

    //Download file 
    Response.Clear() 
    Response.ContentType = "image/jpg"; 
    Response.AddHeader("Content-Disposition", "attachment;filename=\"" + absolutePath + "\""); 
    Response.BinaryWrite(ms.ToArray()) 
} 
catch {} 

Response.End(); 
Смежные вопросы