Serve file, log when download is finished
I'm trying to save a log of when a large file is downloaded from my server.
The file is served with this method:
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);
}
When the file is finished I want to store a database record of that.
So far my ideas have been to find an event that listens to when a stream disposes or closes, but that doesn't seem to exist. Another idea I had was to compare position of the stream to the length of it, but then I have no idea how to check that.
c# asp.net-core asp.net-core-mvc
add a comment |
I'm trying to save a log of when a large file is downloaded from my server.
The file is served with this method:
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);
}
When the file is finished I want to store a database record of that.
So far my ideas have been to find an event that listens to when a stream disposes or closes, but that doesn't seem to exist. Another idea I had was to compare position of the stream to the length of it, but then I have no idea how to check that.
c# asp.net-core asp.net-core-mvc
add a comment |
I'm trying to save a log of when a large file is downloaded from my server.
The file is served with this method:
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);
}
When the file is finished I want to store a database record of that.
So far my ideas have been to find an event that listens to when a stream disposes or closes, but that doesn't seem to exist. Another idea I had was to compare position of the stream to the length of it, but then I have no idea how to check that.
c# asp.net-core asp.net-core-mvc
I'm trying to save a log of when a large file is downloaded from my server.
The file is served with this method:
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);
}
When the file is finished I want to store a database record of that.
So far my ideas have been to find an event that listens to when a stream disposes or closes, but that doesn't seem to exist. Another idea I had was to compare position of the stream to the length of it, but then I have no idea how to check that.
c# asp.net-core asp.net-core-mvc
c# asp.net-core asp.net-core-mvc
edited Nov 20 '18 at 0:57
Tetsuya Yamamoto
14.8k42040
14.8k42040
asked Nov 19 '18 at 19:45
Johan SvenssonJohan Svensson
4773723
4773723
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
What if you created a custom stream class that allowed you to log that event? Something like this:
public class MyAwesomeStream : FileStream
{
//...
public override Dispose(bool disposing)
{
//do your event logging / handling here
base.Dispose(disposing);
)
}
Then just swap that in wherever you were using FileStream
.
add a comment |
For executing a method after download complete, you could try ActionFilter
, its OnActionExecuted
will be called after Download
method complete.
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();
}
}
Use method.
[TypeFilter(typeof(FileDownloadCompleteActionFilter))]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381619%2fserve-file-log-when-download-is-finished%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
What if you created a custom stream class that allowed you to log that event? Something like this:
public class MyAwesomeStream : FileStream
{
//...
public override Dispose(bool disposing)
{
//do your event logging / handling here
base.Dispose(disposing);
)
}
Then just swap that in wherever you were using FileStream
.
add a comment |
What if you created a custom stream class that allowed you to log that event? Something like this:
public class MyAwesomeStream : FileStream
{
//...
public override Dispose(bool disposing)
{
//do your event logging / handling here
base.Dispose(disposing);
)
}
Then just swap that in wherever you were using FileStream
.
add a comment |
What if you created a custom stream class that allowed you to log that event? Something like this:
public class MyAwesomeStream : FileStream
{
//...
public override Dispose(bool disposing)
{
//do your event logging / handling here
base.Dispose(disposing);
)
}
Then just swap that in wherever you were using FileStream
.
What if you created a custom stream class that allowed you to log that event? Something like this:
public class MyAwesomeStream : FileStream
{
//...
public override Dispose(bool disposing)
{
//do your event logging / handling here
base.Dispose(disposing);
)
}
Then just swap that in wherever you were using FileStream
.
answered Nov 19 '18 at 19:54


BecuzzBecuzz
6,0942034
6,0942034
add a comment |
add a comment |
For executing a method after download complete, you could try ActionFilter
, its OnActionExecuted
will be called after Download
method complete.
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();
}
}
Use method.
[TypeFilter(typeof(FileDownloadCompleteActionFilter))]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
add a comment |
For executing a method after download complete, you could try ActionFilter
, its OnActionExecuted
will be called after Download
method complete.
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();
}
}
Use method.
[TypeFilter(typeof(FileDownloadCompleteActionFilter))]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
add a comment |
For executing a method after download complete, you could try ActionFilter
, its OnActionExecuted
will be called after Download
method complete.
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();
}
}
Use method.
[TypeFilter(typeof(FileDownloadCompleteActionFilter))]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
For executing a method after download complete, you could try ActionFilter
, its OnActionExecuted
will be called after Download
method complete.
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();
}
}
Use method.
[TypeFilter(typeof(FileDownloadCompleteActionFilter))]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
answered Nov 21 '18 at 6:26


Tao ZhouTao Zhou
5,29231128
5,29231128
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381619%2fserve-file-log-when-download-is-finished%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown