it-swarm-eu.dev

Je možné přesměrovat po „zaslání“ souboru uživateli?

Mám nastavení, kde web generuje interní analýzu jeho využití. Uživatelé mají možnost požádat o stažení své osobní analýzy, a protože tyto informace jsou citlivé, nevytvářím žádné soubory, generuji soubor CSV v proměnné a poté jej „push“ s tímto uživatelem:

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;
}

To způsobí, že prohlížeč uživatele otevře dialogové okno „uložit soubor“ a uživatel získá soubor vytvořený na jejich konci. Funguje to dobře, s výjimkou správců webu, kteří jsou schopni spustit „destruktivní vývozy“ - a v této situaci mám sekundární potvrzovací formulář, který musí administrátor přijmout před provedením destruktivního exportu.

Problém je v tom, že tato rutina „stahování stahování“ ukončí zpracování stránky Drupal zpracování stránky.) Neexistuje žádný způsob, jak přesměrovat admin na nějakou stránku po vyvolání této rutiny stahování push. Správci dostanou „ uložit soubor 'dialogové okno vyskočilo jejich prohlížeč, ale zůstanou v potvrzovacím formuláři.

Snažil jsem se jít po vícekrokové formě, ale po dni, kdy jsem se potápěl s podivnými přesměrováními, jsem zmatek zmizel. Začal jsem se také dívat na logiku vícestupňového tvaru ChaosTool. Ale něco mi říká, že problém je ve skutečnosti v tom, že tento „stahování stahování“ je zabiják s průvodcem.

Možná dialogové okno pro potvrzení jQuery, které zachycuje počáteční tlačítko „Export“, provádí potvrzení úplně v javascriptu, zapomíná se na formulář pro potvrzení php/FAPI a když uživatel potvrdí v jQu, programově odešlu export, který jsem zachytil?

7
Blake Senftner

Zdá se, že existují nějaké triky, netuší, jak dobře fungují uvnitř Drupalu.

Viz například http://www.willmaster.com/blog/automation/one-link-download-and-redirect.php

2
Berdir

Pokud vím, není to možné. Můžete buď odeslat obsah (ve vašem případě soubor), nebo přesměrovat. Ne obojí. Toto je omezení protokolu HTTP

3
Fuzzy76

Myslím, že vaše nejlepší sázka může být vygenerování tokenu, když uživatel odešle formulář, a pak si token uloží všechny potřebné informace pro vygenerování souboru CSV. Nechte formulář přesměrovat uživatele na příslušnou stránku a pomocí odkazu drupal_set_message () zadejte odkaz, který obsahuje token.

Po klepnutí na odkaz lze v tomto okamžiku vygenerovat a odeslat uživateli soubor CSV. Je pravda, že je to komplikovanější, než jen generování při odeslání formuláře, ale jak říká Fuzzy76, jste proti omezení protokolu HTTP. Pokud to uděláte, může to být jednodušší než pokusit se vytvořit řešení založené na JavaScriptu.

2
Chris Cohen

Takto jsem to dosáhl v Drupal přes Jquery/JS My Answere here -> Dosáhl jsem to pomocí JS, Fine fine answer here -> https://stackoverflow.com/ otázky/822707/php -gener-file-for-download-then-redirect/25843144 # 25843144

0
Vaibhav Jain