@@ -2,18 +2,13 @@ namespace LearningHub.Nhs.WebUI.Controllers.Api
22{
33 using System ;
44 using System . Collections . Generic ;
5- using System . IO ;
6- using System . Linq ;
7- using System . Net . Http . Headers ;
8- using System . Threading ;
95 using System . Threading . Tasks ;
106 using LearningHub . Nhs . Models . Enums ;
117 using LearningHub . Nhs . Models . Resource ;
128 using LearningHub . Nhs . Models . Resource . Activity ;
139 using LearningHub . Nhs . Models . Resource . Contribute ;
1410 using LearningHub . Nhs . WebUI . Interfaces ;
1511 using Microsoft . AspNetCore . Authorization ;
16- using Microsoft . AspNetCore . Http ;
1712 using Microsoft . AspNetCore . Mvc ;
1813 using Microsoft . Extensions . Configuration ;
1914
@@ -76,15 +71,7 @@ public async Task<IActionResult> DownloadResource(string filePath, string fileNa
7671 var file = await this . fileService . DownloadFileAsync ( filePath , fileName ) ;
7772 if ( file != null )
7873 {
79- // Set response headers.
80- this . Response . ContentType = file . ContentType ;
81- this . Response . ContentLength = file . ContentLength ;
82- var contentDisposition = new ContentDispositionHeaderValue ( "attachment" ) { FileNameStar = fileName } ;
83- this . Response . Headers [ "Content-Disposition" ] = contentDisposition . ToString ( ) ;
84-
85- // Stream the file in chunks with periodic flushes to keep the connection active.
86- await this . StreamFileWithKeepAliveAsync ( file . Content , this . Response . Body , this . HttpContext . RequestAborted ) ;
87- return this . Ok ( ) ;
74+ return this . File ( file . Content , file . ContentType , fileName ) ;
8875 }
8976 else
9077 {
@@ -119,16 +106,7 @@ public async Task<IActionResult> DownloadResourceAndRecordActivity(int resourceV
119106 ActivityStatus = ActivityStatusEnum . Completed ,
120107 } ;
121108 await this . activityService . CreateResourceActivityAsync ( activity ) ;
122-
123- // Set response headers.
124- this . Response . ContentType = file . ContentType ;
125- this . Response . ContentLength = file . ContentLength ;
126- var contentDisposition = new ContentDispositionHeaderValue ( "attachment" ) { FileNameStar = fileName } ;
127- this . Response . Headers [ "Content-Disposition" ] = contentDisposition . ToString ( ) ;
128-
129- // Stream the file in chunks with periodic flushes to keep the connection active.
130- await this . StreamFileWithKeepAliveAsync ( file . Content , this . Response . Body , this . HttpContext . RequestAborted ) ;
131- return this . Ok ( ) ;
109+ return this . File ( file . Content , file . ContentType , fileName ) ;
132110 }
133111 else
134112 {
@@ -607,20 +585,5 @@ public async Task<List<string>> GetObsoleteResourceFile(int resourceVersionId, b
607585 var result = await this . resourceService . GetObsoleteResourceFile ( resourceVersionId , deletedResource ) ;
608586 return result ;
609587 }
610-
611- /// <summary>
612- /// Reads from the source stream in chunks and writes to the destination stream,
613- /// flushing after each chunk to help keep the connection active.
614- /// </summary>
615- private async Task StreamFileWithKeepAliveAsync ( Stream source , Stream destination , CancellationToken cancellationToken )
616- {
617- byte [ ] buffer = new byte [ 8192 ] ;
618- int bytesRead ;
619- while ( ( bytesRead = await source . ReadAsync ( buffer , 0 , buffer . Length , cancellationToken ) ) > 0 )
620- {
621- await destination . WriteAsync ( buffer , 0 , bytesRead , cancellationToken ) ;
622- await destination . FlushAsync ( cancellationToken ) ;
623- }
624- }
625588 }
626589}
0 commit comments