2012-05-25 5 views
1

MVC 작업에서 다운로드 기능을 만들려고하는데 실제 다운로드가 작동하지만 파일은 actionname과 함께 파일 이름으로 저장됩니다. 아래 코드에서 'DownloadMP3'이라는 파일 이름을 얻습니다. 다운로드시 원본 파일 이름을 유지하는 방법을 아는 사람이 있습니까?파일 다운로드 기능 생성

[Authorize] 
    public virtual FileResult DownloadMP3(string fileName) 
    { 
     //Actions/Download?filename=test 

     //test 
     string filePath = @"~/Content/xxxxx/" + fileName + ".mp3"; 

     Response.AddHeader("content-disposition", "attachment;" + filePath + ";"); 

     return File(filePath, "audio/mpeg3"); 

     //for wav use audio/wav 

    } 

답변

1

내용 - 처리 헤더의 올바른 구문은 다음과 같다 :

Content-Disposition: attachment; filename=foo.mp3 

그러나이 경우 당신은 단순히 3 개 인수를 파일 메서드의 오버로드를 사용할 수

, 세 번째가되는 파일 이름. 첨부 파일이있는 Content-Disposition 헤더가 자동으로 생성되므로 수동으로 추가 할 필요가 없습니다 (구문을 실수로 수정하지 않아도됩니다).

또한 변수 filePath은 상대 URL이 아닌 서버의 실제 파일을 가리켜 야합니다. 이를 위해 Server.MapPath을 사용

public virtual ActionResult DownloadMP3(string fileName) 
{ 
    var downloadPath = Server.MapPath("~/Content/xxxxx/"); 
    fileName = Path.ChangeExtension(Path.GetFileName(fileName), "mp3"); 
    var file = Path.Combine(downloadPath, fileName); 
    return File(file, "audio/mpeg3", fileName); 
} 
0

는 그냥 내용 처리에 파일 이름을 넣어 아닌 가상 경로 :

string fileOnly = fileName + ".mp3"; 
    string filePath = @"~/Content/xxxxx/" + fileOnly; 

    Response.AddHeader("content-disposition", "attachment;" + fileOnly + ";"); 
0

한번에 추가하는 세 번째 매개 변수

return File(file.FullPath, file.MimeType, file.FullName);