public ActionResult Get(string filename)
 {
     FileEntity fileEntity = GetFileInfo(filename);
     string fileFullPath = System.IO.Path.Combine(@"C:\", fileEntity.file_path, filename);
     if (fileEntity == null)
         return NotFound();
     FileStream fileStream = System.IO.File.Open(fileFullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
     long startByteIndex = 0;
     long endByteIndex = fileEntity.file_length-1;
     var reqTypedHeader = Request.GetTypedHeaders();
     if (reqTypedHeader.Range!=null && reqTypedHeader.Range.Ranges.Count>0)
     {
         //断点续传处理,多range情景没有处理
         startByteIndex = reqTypedHeader.Range.Ranges.First().From ?? 0;
         endByteIndex = reqTypedHeader.Range.Ranges.First().To ?? fileEntity.file_length - 1;
         Response.StatusCode = StatusCodes.Status206PartialContent;
         var contentRange = new ContentRangeHeaderValue(startByteIndex, endByteIndex);
         Response.Headers[HeaderNames.ContentRange] = contentRange.ToString();
     }
     Response.ContentType = fileEntity.file_mimetype;
     var contentDisposition = new ContentDispositionHeaderValue("attachment");
     contentDisposition.SetHttpFileName(fileEntity.file_name);
     Response.Headers[HeaderNames.ContentDisposition] = contentDisposition.ToString();
     Response.ContentLength = fileStream.Length;
     Response.Headers[HeaderNames.AcceptRanges] = "bytes";
     return new FileStreamResult(fileStream,fileEntity.file_mimetype);
 }
Example #2
0
        public void ToString_UseDifferentRanges_AllSerializedCorrectly()
        {
            var range = new ContentRangeHeaderValue(1, 2, 3);

            range.Unit = "myunit";
            Assert.Equal("myunit 1-2/3", range.ToString());

            range = new ContentRangeHeaderValue(123456789012345678, 123456789012345679);
            Assert.Equal("bytes 123456789012345678-123456789012345679/*", range.ToString());

            range = new ContentRangeHeaderValue(150);
            Assert.Equal("bytes */150", range.ToString());
        }
        public void ToString_UseDifferentRanges_AllSerializedCorrectly()
        {
            var range = new ContentRangeHeaderValue(1, 2, 3);
            range.Unit = "myunit";
            Assert.Equal("myunit 1-2/3", range.ToString());

            range = new ContentRangeHeaderValue(123456789012345678, 123456789012345679);
            Assert.Equal("bytes 123456789012345678-123456789012345679/*", range.ToString());

            range = new ContentRangeHeaderValue(150);
            Assert.Equal("bytes */150", range.ToString());
        }