2012-08-31 7 views
1

POST 데이터를 백엔드 스크립트에 보내고 임시 파일을 생성하기 위해 (동적으로 생성되어 서버의 디스크에 저장되지 않음) 일시적인 파일을 생성하는 데 사용할 방법을 찾고 있습니다. 다운로드로 클라이언트에게 제공하십시오.AJAX를 통해 강제로 다운로드

나는 제대로 동작하는 백엔드 스크립트를 가지고있다. 문제는 아직 AJAX 호출을 통해 다운로드 프롬프트를 표시하는 방법을 찾지 못했다는 것입니다. 심지어 수 후있어 무엇

window.location.href = 'path/to/my/script.php'; 

입니다 : 내가 POST ING 데이터가 아니었다면

, 난 그냥 뭔가를 사용해야합니까? DOM에 양식을 동적으로 주입하고 제출하거나 다른 브라우저 창을 여는 등의 "해킹"에 의지하지 않고도 완료 할 수 있습니까?

+0

양식의 '대상'을 숨겨진 'iframe'으로 변경 한 다음 제출할 수 있습니까? ASP.NET과 같은 viewstate 정보를 다루는 경우에는 같은 페이지를 호출해야합니다. – freefaller

+0

보이지는 않지만 원치 않는 양식을 게시하는 것처럼 현재 페이지 동작을 원합니다 보이지 않는 양식을 갖는 것에 "의지"하고 게시하는 것. 왜? –

+0

@JonHanna : 사용자가 UI에서 JS 개체로 구성된 작업을 수행합니다. 사용자가 저장하면이 JS 개체 및 기타 관련 데이터를 POST로 보내고 서버에서 "파일"을 구성한 다음 클라이언트에 다운로드하도록 요청합니다. – FtDRbwLXw6

답변

4
  1. POST 요청을하십시오.
  2. 리소스를 생성하십시오.
  3. 리소스 경로와 응답;
  4. window.location.href = resourcePath.
  5. [선택 사항] 3 부 다운로드에서 해당 리소스를 보호하고 싶습니까? CSRF 토큰을 첨부하고 CSRF 확인이 통과 된 경우에만 리소스를 사용할 수있게하십시오. 그렇지 않으면 축하합니다. 403 마리의 강아지를 얻었습니다!

리소스에 적절한 헤더가있는 경우 브라우저에서 특정 앱과 함께 저장/열기를 요청합니다./그렇소.

+0

내 질문에 콘텐츠가 서버의 디스크에 저장되지 않는다고 언급했습니다. 그건 내가 깨끗한 crons을 실행하고 디스크 공간 등을 유지하는 것이 필요합니다. – FtDRbwLXw6

+0

일부 특정 요청 매개 변수로 필요한 경우 GET 대신 리소스를 생성하십시오. – BalusC

+0

@drrcknlsn 나는 리소스를 RESTful 방식으로 사용했다. 나중에 바이너리 응답을 생성 할 수있다. 세션에서'POST'를 통해 얻은 결과를 저장하고, 첫 번째 응답에서 제공 한 ID를 통해 reget한다. – moonwave99

1

GET을 통해 다운로드를 사용할 수있는 경우가 아니면 고전적인 양식 제출 없이는 그렇게 할 수 없습니다.

그러나 다운로드 관리자 등이 POST에서 제대로 작동하지 않는 것이 좋습니다. 스크립트가 임시 URL을 생성 한 다음 이미 게시 한 JavaScript를 사용하여 해당 URL로 리디렉션하면됩니다. 너의 질문.

관련 문제