forked from ServiceStack/ServiceStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFileResult.cs
More file actions
55 lines (45 loc) · 1.39 KB
/
Copy pathFileResult.cs
File metadata and controls
55 lines (45 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System.Collections.Generic;
using System.IO;
using ServiceStack.Service;
using ServiceStack.ServiceHost;
using ServiceStack.Text;
namespace ServiceStack.Common.Web
{
public class FileResult
: IStreamWriter, IHasOptions
{
public FileInfo FileInfo { get; private set; }
public Dictionary<string, string> HttpHeaders { get; private set; }
public IDictionary<string, string> Options
{
get { return this.HttpHeaders; }
}
public FileResult(string filePath)
: this(new FileInfo(filePath)) { }
public FileResult(FileInfo fileInfo)
: this(fileInfo, MimeTypes.GetMimeType(fileInfo.Name)) { }
public FileResult(FileInfo fileInfo, string contentType)
{
this.FileInfo = fileInfo;
var headerValue =
"attachment; " +
"filename=\"" + fileInfo.Name + "\"; " +
"size=" + fileInfo.Length + "; " +
"creation-date=" + fileInfo.CreationTimeUtc.ToString("R") + "; " +
"modification-date=" + fileInfo.LastWriteTimeUtc.ToString("R") + "; " +
"read-date=" + fileInfo.LastAccessTimeUtc.ToString("R");
this.HttpHeaders = new Dictionary<string, string> {
{ Web.HttpHeaders.ContentType, contentType },
{ Web.HttpHeaders.ContentDisposition, headerValue },
};
}
public void WriteTo(Stream stream)
{
using (var fs = this.FileInfo.OpenRead())
{
fs.WriteTo(stream);
stream.Flush();
}
}
}
}