it-swarm-id.com

Apakah mungkin untuk mengarahkan ulang setelah "mendorong" file ke pengguna?

Saya punya pengaturan tempat situs membuat analitik internal tentang penggunaan situs. Pengguna dapat meminta pengunduhan analitik pribadi mereka, dan karena informasi ini sensitif saya tidak membuat file apa pun, saya membuat file CSV dalam sebuah variabel dan kemudian "Dorong" ke pengguna dengan ini:

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

Ini menyebabkan browser pengguna memunculkan dialog "save file", dan pengguna mendapatkan file yang dibuat pada akhirnya. Ini berfungsi dengan baik, kecuali administrator situs dapat memicu 'ekspor destruktif' - dan dalam situasi itu saya memiliki formulir konfirmasi sekunder yang harus diterima oleh admin sebelum ekspor destruktif dijalankan.

Masalahnya adalah bahwa rutinitas "Push unduhan" ini mengakhiri pemrosesan halaman Drupal. Tampaknya tidak ada cara untuk mengarahkan admin ke beberapa halaman setelah itu rutinitas unduh Push dipanggil. Admin mendapatkan ' dialog save file 'muncul oleh browser mereka, tetapi mereka tetap pada formulir konfirmasi.

Saya mencoba menempuh rute multi-langkah, tetapi setelah seharian sibuk dengan arahan ulang yang aneh, saya mundur dari kebingungan itu. Mulai melihat logika bentuk multi-langkah ChaosTool juga. Tetapi ada sesuatu yang memberitahu saya bahwa masalahnya adalah "Push unduhan" ini adalah pembunuh proses yang dipandu.

Mungkin dialog konfirmasi jquery yang mencegat klik tombol 'Ekspor' awal, apakah konfirmasi sepenuhnya dalam javascript, lupa memiliki formulir konfirmasi php/FAPI, dan ketika pengguna mengonfirmasi di jquery saya secara terprogram mengirimkan Ekspor yang saya sadap?

7
Blake Senftner

Tampaknya ada beberapa trik, tidak tahu seberapa baik mereka bekerja di dalam Drupal.

Lihat misalnya http://www.willmaster.com/blog/automation/one-link-download-and-redirect.php

2
Berdir

Sejauh yang saya tahu, itu tidak mungkin. Anda dapat mengirim konten (dalam kasus Anda file), atau mengarahkan. Tidak keduanya. Ini adalah batasan protokol HTTP

3
Fuzzy76

Saya pikir taruhan terbaik Anda mungkin untuk menghasilkan token ketika pengguna mengirimkan formulir, dan kemudian meminta token menyimpan semua informasi yang diperlukan untuk menghasilkan file CSV. Minta formulir untuk mengarahkan pengguna ke halaman yang sesuai, dan gunakan drupal_set_message () untuk memberikan tautan yang berisi token.

Ketika tautan diklik, file CSV dapat dibuat dan dikirim ke pengguna pada saat itu. Memang, ini lebih rumit daripada hanya menghasilkannya pada formulir yang dikirimkan, tetapi seperti yang dikatakan Fuzzy76, Anda menghadapi batasan protokol HTTP. Melakukannya dengan cara ini mungkin lebih sederhana daripada mencoba membuat solusi berbasis JavaScript.

2
Chris Cohen

Ini adalah bagaimana saya mencapainya di Drupal via Jquery/JS Jawaban Saya di sini -> Saya mencapainya melalui JS, Baik jawaban saya di sini -> https://stackoverflow.com/ pertanyaan/822707/php-generate-file-for-download-then-redirect/25843144 # 25843144

0
Vaibhav Jain