Merge pull request #1436 from esdrubal/readerwriterlockslim
[mono.git] / mcs / class / System.Web.Mvc3 / Mvc / FileStreamResult.cs
1 namespace System.Web.Mvc {
2     using System;
3     using System.IO;
4     using System.Web;
5
6     public class FileStreamResult : FileResult {
7
8         // default buffer size as defined in BufferedStream type
9         private const int _bufferSize = 0x1000;
10
11         public FileStreamResult(Stream fileStream, string contentType)
12             : base(contentType) {
13             if (fileStream == null) {
14                 throw new ArgumentNullException("fileStream");
15             }
16
17             FileStream = fileStream;
18         }
19
20         public Stream FileStream {
21             get;
22             private set;
23         }
24
25         protected override void WriteFile(HttpResponseBase response) {
26             // grab chunks of data and write to the output stream
27             Stream outputStream = response.OutputStream;
28             using (FileStream) {
29                 byte[] buffer = new byte[_bufferSize];
30
31                 while (true) {
32                     int bytesRead = FileStream.Read(buffer, 0, _bufferSize);
33                     if (bytesRead == 0) {
34                         // no more data
35                         break;
36                     }
37
38                     outputStream.Write(buffer, 0, bytesRead);
39                 }
40             }
41         }
42
43     }
44 }