Как я могу удалить файл после полной загрузки на клиентском ПК в MVC asp.net - PullRequest
2 голосов
/ 04 апреля 2011

Я использовал функцию getCSV для возврата CSV-файла на стороне клиента, но я хочу удалить файл после завершения загрузки на стороне клиента

моя функция

Public Function GetCSVFile(ByVal listSeperator As String) As CSVResult
    Dim result As Boolean
    Dim Service As New Service()
    Dim types As IList(Of ProductType) = Service.GetAllWithAllLocalizedNames(New ListOptions(Name", OrderByDirection.Ascending, 1, -1))
    Dim path As String, colname As String
    colname = Settings.GetLanguage()
    path = Common.GetLocalizeDataPath()
    Dim seprator As String = Common.GetListSepratorForCSV(listSeperator)
    Dim cs As New CSVGenerator(path, colname, seprator)
    result = cs.CreateCSVFile(types)
    If result Then
        Return New CSVResult With {.FileName = "Sample.csv", .Path = "~/Mydir/Sample.csv"}
    Else
        Return New CSVResult With {.FileName = "Error.csv", .Path = "~/Mydir/Error.csv"}
    End If
End Function

Ответы [ 5 ]

6 голосов
/ 16 июля 2012

У меня работает только если вы сбросите ответ.Фильтр атрибутов должен выглядеть следующим образом

    public class DeleteTempFileResultFilter : ActionFilterAttribute
    {
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            string fileName = ((FilePathResult)filterContext.Result).FileName;

            filterContext.HttpContext.Response.Flush();
            filterContext.HttpContext.Response.End();

            System.IO.File.Delete(fileName);
        }
    }
1 голос
/ 24 августа 2016

Надеюсь, это поможет вам. Сначала вам нужно записать данные в файл на сервере, а затем использовать опцию give для клиента, чтобы загрузить файл. после этого используйте file.delete для удаления файла с сервера

Response.ContentType = ContentType;
Response.AppendHeader("Content-Disposition","attachment;filename=myFile.txt");
Response.WriteFile(Server.MapPath("~/FilePath"));
Response.Flush();
System.IO.File.Delete(Server.MapPath("~/FilePath"));
Response.End();
1 голос
/ 04 апреля 2011

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

Подобный вопрос обсуждался здесь: ASP.NET потоковое содержимое из памяти, а не из файла

0 голосов
/ 06 апреля 2011

Создайте класс и унаследуйте форму actionfilterattribute и переопределите метод OnResultExecuted

Public Class DeleteFileAttribute
    Inherits ActionFilterAttribute
    Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
        Dim path As String = filterContext.HttpContext.Server.MapPath("~/LocalizeData")
        Dim filename As String = DirectCast(filterContext.Result, CSVResult).FileName  'filterContext.RouteData.Values("Path").ToString()
        If File.Exists(System.IO.Path.Combine(path, filename)) Then
            File.Delete(System.IO.Path.Combine(path, filename))
        End If

    End Sub
End Class

и применить атрибут удаления к функции

например

<DeleteFile()>
Public Function GetCSVFile(ByVal listSeperator As String) As CSVResult
    Dim result As Boolean
    Dim Service As New Service()
    Dim types As IList(Of ProductType) = Service.GetAllWithAllLocalizedNames(New ListOptions(Name", OrderByDirection.Ascending, 1, -1))
    Dim path As String, colname As String
    colname = Settings.GetLanguage()
    path = Common.GetLocalizeDataPath()
    Dim seprator As String = Common.GetListSepratorForCSV(listSeperator)
    Dim cs As New CSVGenerator(path, colname, seprator)
    result = cs.CreateCSVFile(types)
    If result Then
        Return New CSVResult With {.FileName = "Sample.csv", .Path = "~/Mydir/Sample.csv"}
    Else
        Return New CSVResult With {.FileName = "Error.csv", .Path = "~/Mydir/Error.csv"}
    End If
End Function

и еще одна проблема с результатом выполнения, пожалуйста, промойте ответ и закройте его

context.HttpContext.Response.Flush()
context.HttpContext.Response.End()
0 голосов
/ 04 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...