왜 아약스 요청을 사용하여 파일을 다운로드 할 수 없습니까?
애플리케이션에서는, 다음의 시나리오를 실장할 필요가 있습니다.
- 클라이언트에서 요청이 전송되었습니다.
- 서버가 요청을 처리하여 파일을 생성합니다.
- 서버가 응답으로 파일을 반환함
- 클라이언트 브라우저에 파일 다운로드 팝업 대화상자가 표시되며 사용자가 파일을 다운로드할 수 있습니다.
어플리케이션은 Ajax 기반 어플리케이션이기 때문에 Ajax 요청을 보내는 것이 매우 쉽고 편리할 것입니다(예를 들어,jquery.ajax()기능).
그러나 구글 검색 결과 파일 다운로드가 가능한 것은 (이 일반적인 SO 스레드에서 설명한 것처럼) 비 ajax POST 요청을 사용하는 경우뿐입니다.그 때문에, 보다 추악하고 복잡한 솔루션을 실장할 필요가 있었습니다.이 솔루션에서는, 다음의 HTML 구조를 구축할 필요가 있었습니다.form숨김 필드가 중첩되어 있습니다.
왜 파일 다운로드에 Ajax 요청을 사용할 수 없는지 알기 쉽게 설명해 주시겠습니까?그 배후에 있는 기계들은 무엇입니까?
AJAX가 아니라물론 AJAX로 파일을 다운로드할 수 있습니다.다만, 파일은 메모리에 보존됩니다.즉, 디스크에 파일을 보존할 수 없습니다.이는 JavaScript가 디스크와 상호 작용할 수 없기 때문입니다.이는 심각한 보안 문제로 모든 주요 브라우저에서 차단됩니다.
이것은 Blob이라고 불리는 새로운 HTML5 기능을 사용하여 수행할 수 있습니다.이 기능 위에 래퍼로 사용할 수 있는 라이브러리의 FileSaver.js가 있습니다.
그건 이틀 전에 내가 스스로에게 물었던 것과 같은 질문이다.클라이언트가 ExtJ를 사용하여 작성한 프로젝트가 있었고 서버 측 실현은 ASP에 있었습니다.넷 서버 측을 자바 측으로 변환해야 합니다.클라이언트의 Ajax 요청 후 서버가 생성하는 XML 파일을 다운로드하는 기능이 있었습니다.Ajax 요청 후 파일을 다운로드하는 것은 불가능하며, 단지 메모리에 저장하는 것은 불가능하다는 것을 우리는 모두 알고 있습니다.그렇지만.....원래 응용 프로그램브라우저에 일반적인 대화상자가 표시되며 다운로드가 열려 저장 및 취소됩니다.ASP.Net은 표준 동작을 변경했습니다...다시 증명하는 데 이틀이 걸립니다.일반적인 방법으로 파일을 다운로드 할 수 있는 방법은 없습니다.유일한 예외는 ASP입니다.넷... 여기 ASP가 있어요.인터넷 코드
public static void WriteFileToResponse(byte[] fileData, string fileName)
{
var response = HttpContext.Current.Response;
var returnFilename = Path.GetFileName(fileName);
var headerValue = String.Format("attachment; filename={0}",
HttpUtility.UrlPathEncode(
String.IsNullOrEmpty(returnFilename)
? "attachment" : returnFilename));
response.AddHeader("content-disposition", headerValue);
response.ContentType = "application/octet-stream";
response.AddHeader("Pragma", "public");
var utf8 = Encoding.UTF8;
response.Charset = utf8.HeaderName;
response.ContentEncoding = utf8;
response.Flush();
response.BinaryWrite(fileData);
response.Flush();
response.Close();
}
이 메서드는 WebMethod에서 호출되어 ExtJ에서 호출되었습니다.Ajax.요구.그게 마법이야.난 뭐 어때, 난 서블릿으로 끝났고 숨겨진 iframe...
다운로드 페이지에서 숨겨진 iframe을 사용하여 이 작업을 수행할 수 있습니다.
숨겨진 ifame의 src를 ajax 성공 응답에 설정하면 작업이 완료됩니다.
$.ajax({
type: 'GET',
url: './page.php',
data: $("#myform").serialize(),
success: function (data) {
$("#middle").attr('src','url');
},
});
언급URL : https://stackoverflow.com/questions/14682556/why-threre-is-no-way-to-download-file-using-ajax-request
'programing' 카테고리의 다른 글
| ajax를 통해 html 페이지를 로드할 때 스크립트 태그가 로드됩니까? (0) | 2023.03.31 |
|---|---|
| Spring Boot에서의 Request Context Listener 설정 (0) | 2023.03.31 |
| 열 지향 NoSQL은 문서 지향과 어떻게 다릅니까? (0) | 2023.03.26 |
| Oracle에서 SQL을 사용하여 올해를 얻으려면 어떻게 해야 합니까? (0) | 2023.03.26 |
| Oracle PL/SQL - 단순 배열 변수 작성 방법 (0) | 2023.03.26 |