我正在尝试保存从服务器下载大文件的日志。 该文件通过以下方法提供:
public IActionResult Download(string filename)
{
FileStream stream = new FileStream(this.Path + filename,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite,
65536,
FileOptions.Asynchronous | FileOptions.SequentialScan
);
return File(stream, "application/octet-stream", filename);
}
文件完成后,我想存储该文件的数据库记录。
到目前为止,我的想法一直是找到一个事件,该事件在流处理或关闭时监听,但是似乎不存在。我的另一个想法是比较流的位置和流的长度,但是后来我不知道如何检查。
答案 0 :(得分:1)
如果您创建了一个允许您记录该事件的自定义流类,该怎么办?像这样:
public class MyAwesomeStream : FileStream
{
//...
public override Dispose(bool disposing)
{
//do your event logging / handling here
base.Dispose(disposing);
)
}
然后只要在使用FileStream
的地方交换即可。
答案 1 :(得分:1)
要在下载完成后执行方法,可以尝试ActionFilter
,在OnActionExecuted
方法完成后将调用其Download
。
FileDownloadCompleteActionFilter.cs
public class FileDownloadCompleteActionFilter : ActionFilterAttribute
{
private readonly MVCProContext _context;
public FileDownloadCompleteActionFilter(MVCProContext context)
{
_context = context;
}
public override void OnActionExecuted(ActionExecutedContext context)
{
base.OnActionExecuted(context);
//called after executing the action
_context.Language.Add(new Language { LanguageName = "L1"});
_context.SaveChanges();
}
}
使用方法。
[TypeFilter(typeof(FileDownloadCompleteActionFilter))]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}