ASP.NET 웹 API에서 다운로드 파일 이름을 설정하는 방법
내 ApiController 클래스에는 서버에서 만든 파일을 다운로드하는 다음과 같은 메서드가 있습니다.
public HttpResponseMessage Get(int id)
{
try
{
string dir = HttpContext.Current.Server.MapPath("~"); //location of the template file
Stream file = new MemoryStream();
Stream result = _service.GetMyForm(id, dir, file);
if (result == null)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
result.Position = 0;
HttpResponseMessage response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
return response;
}
catch (IOException)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError);
}
}
기본 다운로드 파일 이름이 ID이므로 사용자가 매번 다른 이름으로 저장 대화 상자에서 자신의 파일 이름을 입력해야한다는 점을 제외하면 모든 것이 완벽하게 작동합니다. 위 코드에서 기본 파일 이름을 설정하는 방법이 있습니까?
에 Content-Disposition
헤더 를 설정해야 합니다 HttpResponseMessage
:
HttpResponseMessage response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "foo.txt"
};
편집 : 의견에서 언급했듯이, 내 대답은처럼 탈출 해야하는 문자를 설명하지 않습니다 ;
. 파일 이름에 세미콜론이 포함될 수있는 경우 Darin에서 허용 된 답변을 사용해야합니다.
파일 이름을 설정하려면 Response.AddHeader를 추가하십시오.
Response.AddHeader("Content-Disposition", "attachment; filename=*FILE_NAME*");
FILE_NAME을 파일 이름으로 변경하십시오.
파일 이름이 올바르게 인코딩되도록하고 WebApi HttpResponseMessage도 피하려면 다음을 사용할 수 있습니다.
Response.AddHeader("Content-Disposition", new System.Net.Mime.ContentDisposition("attachment") { FileName = "foo.txt" }.ToString());
ContentDisposition 또는 ContentDispositionHeaderValue를 사용할 수 있습니다. 두 인스턴스 중 하나에서 ToString을 호출하면 파일 이름 인코딩이 수행됩니다.
나는 이것이 당신에게 도움이 될 것이라고 생각합니다.
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName)
컨텐츠 처리 헤더를 응답에 추가해야합니다.
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
return response;
ASP.NET Core MVC를 사용하는 경우 위의 답변은 약간 변경됩니다.
내 액션 메소드 (을 반환 async Task<JsonResult>
)에서 라인을 반환합니다 (반환 문 앞의 아무 곳이나) :
Response.Headers.Add("Content-Disposition", $"attachment; filename={myFileName}");
이것은해야합니다 :
Response.AddHeader("Content-Disposition", "attachment;filename="+ YourFilename)
참고 : 마지막 줄은 필수입니다.
Access-Control-Expose-Headers를 지정하지 않으면 UI에서 파일 이름을 얻지 못합니다.
FileInfo file = new FileInfo(FILEPATH);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = file.Name
};
response.Content.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
참고URL : https://stackoverflow.com/questions/12145390/how-to-set-downloading-file-name-in-asp-net-web-api
'programing tip' 카테고리의 다른 글
CSS를 사용하여 배경 이미지 중심 맞추기 (0) | 2020.06.27 |
---|---|
XOR이 해시를 결합하는 기본 방법 인 이유는 무엇입니까? (0) | 2020.06.27 |
파일을 세는 bash 명령이 있습니까? (0) | 2020.06.27 |
Angular 2의 로컬 스토리지 (0) | 2020.06.27 |
Java에서 링크 된 목록 데이터 구조를 작성하는 방법 (0) | 2020.06.27 |