it-swarm-ko.tech

파일을 사용자에게 "푸시"한 후 리디렉션 할 수 있습니까?

사이트에서 사이트 사용에 대한 내부 분석을 생성하는 설정이 있습니다. 사용자는 개인 분석 다운로드를 요청할 수 있으며이 정보는 민감하므로 파일을 만들지 않고 변수로 CSV 파일을 생성 한 후 다음과 같이 사용자에게 "밀어 넣기"합니다.

function _cex_download( $output, $filename ) 
{
  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: private");
  header("Content-type: application/octet-stream");
  header("Content-Disposition: attachment; filename=$filename");
  header("Accept-Ranges: bytes");
  echo $output;
  exit;
}

이로 인해 사용자의 브라우저가 "파일 저장"대화 상자를 띄우고 사용자가 파일을 생성합니다. 이것은 사이트 관리자가 '파괴 내보내기'를 트리거 할 수 있다는 점을 제외하고는 잘 작동합니다. 그런 상황에서 파괴적인 내보내기가 실행되기 전에 관리자가 수락해야하는 보조 확인 양식이 있습니다.

문제는이 "푸시 다운로드"루틴이 Drupal 페이지 처리를 종료한다는 것입니다. 푸시 다운로드 루틴이 호출 된 후 관리자를 일부 페이지로 리디렉션 할 수있는 방법이 없습니다. 관리자는 ' 브라우저에서 파일 저장 대화 상자가 팝업되었지만 확인 양식에는 남아 있습니다.

나는 다단계 양식 경로를 시도했지만 이상한 방향 전환으로 하루를 보낸 후에 혼란을 피했습니다. ChaosTool의 다단계 폼 로직도 살펴보기 시작했습니다. 그러나 문제는 실제로이 "푸시 다운로드"는 프로세스 프로세스 킬러라는 것입니다.

아마도 초기 '내보내기'버튼 클릭을 가로 지르는 jquery 확인 대화 상자, 자바 스크립트로 확인을 완전히 수행하고 PHP/FAPI 확인 양식을 잊어 버리고 사용자가 jquery에서 확인하면 인터셉트 내보내기를 제출합니까?

7
Blake Senftner

Drupal에서 얼마나 잘 작동하는지 전혀 모릅니다.

예를 들어 http://www.willmaster.com/blog/automation/one-link-download-and-redirect.php

2
Berdir

내가 아는 한 불가능합니다. 컨텐츠 (파일의 경우)를 보내거나 경로 재 지정할 수 있습니다. 둘 다 아닙니다. 이것은 HTTP 프로토콜의 한계입니다

3
Fuzzy76

사용자가 양식을 제출 할 때 토큰을 생성 한 다음 CSV 파일을 생성하는 데 필요한 모든 정보를 토큰에 저장하는 것이 가장 좋은 방법이라고 생각합니다. 양식에서 사용자를 해당 페이지로 리디렉션하고 drupal_set_message ()를 사용하여 토큰이 포함 된 링크를 제공하십시오.

링크를 클릭하면 해당 시점에 CSV 파일을 생성하여 사용자에게 보낼 수 있습니다. 물론 양식 제출시 생성하는 것보다 더 복잡하지만 Fuzzy76이 말했듯이 HTTP 프로토콜의 제한에 위배됩니다. 이 방법을 사용하는 것이 JavaScript 기반 솔루션을 만드는 것보다 간단 할 수 있습니다.

2
Chris Cohen