programing

파일을 다운로드하지 않고 브라우저에서 열기

muds 2023. 4. 21. 21:30
반응형

파일을 다운로드하지 않고 브라우저에서 열기

사용자에게 몇 가지 문서를 보여줄 MVC 프로젝트가 있습니다.파일은 현재 Azure blob 스토리지에 저장되어 있습니다.

현재 문서는 다음 컨트롤러 액션에서 가져옵니다.

[GET("{zipCode}/{loanNumber}/{classification}/{fileName}")]
public ActionResult GetDocument(string zipCode, string loanNumber, string classification, string fileName)
{
    // get byte array from blob storage
    byte[] doc = _docService.GetDocument(zipCode, loanNumber, classification, fileName);
    string mimeType = "application/octet-stream";
    return File(doc, mimeType, fileName);
}

지금 사용자가 다음과 같은 링크를 클릭할 때:

<a target="_blank" href="http://...controller//GetDocument?zipCode=84016&loanNumber=12345678classification=document&fileName=importantfile.pdf

그런 다음 파일이 브라우저의 다운로드 폴더로 다운로드됩니다.(디폴트 동작이라고 생각했는데) 파일을 브라우저에 표시하기만 하면 됩니다.

mimtype을 변경하고 반환 유형을 ActionResult가 아닌 FileResult로 변경해 봤지만 둘 다 무효입니다.

다운로드하지 않고 브라우저에 파일을 표시하려면 어떻게 해야 하나요?

모든 답변 덕분에 솔루션은 모든 답변의 조합이 되었습니다.

첫 번째로, 제가 VIP를 사용하고 있었기 때문에byte[]필요한 컨트롤러의 동작FileContentResult뿐만 아니라.FileResult 사실을 알게 된 것은 ASP의 4가지 파일 결과 간의 차이점입니다.넷 MVC

둘째, MIME 타입은 non-to-be-be-be-be-octet-stream스트림을 사용하면 브라우저가 파일을 다운로드하기만 하면 됩니다.나는 활자를 바꿔야 했다.application/pdf다른 파일/마임 타입을 처리하기 위해서는 보다 견고한 솔루션을 찾아야 합니다.

셋째, 헤더를 추가해야 했습니다.content-disposition로.inline 투고를 사용하여 콘텐츠 디스포지션이 이미 로 설정되어 있었기 때문에 중복 헤더를 방지하기 위해 코드를 수정해야 한다는 것을 알게 되었습니다.attachment.

성공한 코드:

public FileContentResult GetDocument(string zipCode, string loanNumber, string classification, string fileName)
{
    byte[] doc = _docService.GetDocument(zipCode, loanNumber, classification, fileName);
    string mimeType = "application/pdf"
    Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName);
    return File(doc, mimeType);
} 

조금 전에 다른 사람이 비슷한 질문을 한 것 같습니다.

브라우저에서 PDF 파일을 강제로 여는 방법

헤더를 사용해야 한다는 답변이 표시됩니다.

Content-Disposition: inline; filename.pdf

브라우저는 MIME 유형에 따라 다운로드 또는 표시 여부를 결정해야 합니다.

이것을 시험해 보세요.

string mimeType = "application/pdf";

Physical File Result를 반환하고 HttpGet 메서드를 사용하면 url이 PDF 파일을 엽니다.

public ActionResult GetPublicLink()
{
     path = @"D:\Read\x.pdf";
    return new PhysicalFileResult(path, "application/pdf");
}

언급URL : https://stackoverflow.com/questions/19411335/make-a-file-open-in-browser-instead-of-downloading-it

반응형