it-swarm-tr.com

Bir dosyayı kullanıcıya "gönderdikten" sonra yeniden yönlendirmek mümkün müdür?

Bir sitenin site kullanımı hakkında dahili analiz oluşturduğu bir kurulum var. Kullanıcılar kişisel analitiklerinin indirilmesini talep edebilirler ve bu bilgiler hassas olduğu için herhangi bir dosya oluşturmuyorum, bir değişkende bir CSV dosyası oluşturuyorum ve daha sonra bunu kullanıcıya "gönderiyorum":

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

Bu, kullanıcının tarayıcısının bir "dosya kaydet" iletişim kutusu açmasına neden olur ve kullanıcı oluşturulan dosyayı sonuna kadar alır. Sitenin yöneticileri 'yıkıcı ihracatı' tetikleyebilmeleri dışında bu iyi çalışıyor - ve bu durumda yöneticinin yıkıcı ihracat yapılmadan önce kabul etmesi gereken ikincil bir onay formum var.

Sorun, bu "Push download" yordamının Drupal sayfa işleme işlemini sonlandırmasıdır. Push indirme rutini çağrıldıktan sonra yöneticiyi bir sayfaya yönlendirmenin herhangi bir yolu görünmüyor. Yöneticiler bir ' dosyayı kaydet 'iletişim kutusu tarayıcı tarafından açıldı, ancak onay formunda kalıyorlar.

Çok adımlı form yoluna gitmeye çalıştım, ama bir gün garip yönlendirmelerle dolaştıktan sonra, bu karışıklıktan çıktım. ChaosTool'un çok adımlı form mantığına da bakmaya başladı. Ama bir şey bana sorunun gerçekten bu "Push indirme" güdümlü bir süreç katil olduğunu söylüyor.

Belki de ilk 'Dışa Aktar' düğmesini tıklatmayı engelleyen bir jquery onay iletişim kutusu, onayı tamamen javascript'te yapar, bir php/FAPI onay formuna sahip olmayı unutur ve kullanıcı jquery'de onayladığında ben programlı olarak müdahale ettiğim İhracat'ı gönderirim?

7
Blake Senftner

Bazı numaralar var gibi görünüyor, Drupal'ın içinde ne kadar iyi çalıştıklarını bilmiyorlar.

Bkz. Örneğin http://www.willmaster.com/blog/automation/one-link-download-and-redirect.php

2
Berdir

Bildiğim kadarıyla bu mümkün değil. İçerik gönderebilirsiniz (sizin durumunuzda bir dosya) veya yeniden yönlendirebilirsiniz. İkiside değil. Bu, HTTP protokolünün bir sınırlamasıdır

3
Fuzzy76

En iyi bahis kullanıcı form gönderdiğinde bir jeton oluşturmak ve daha sonra jeton CSV dosyasını oluşturmak için gerekli tüm bilgileri depolamak olabilir düşünüyorum. Formun kullanıcıyı uygun sayfaya yönlendirmesini sağlayın ve jetonu içeren bir bağlantı sağlamak için drupal_set_message () kullanın.

Bağlantı tıklandığında, CSV dosyası oluşturulabilir ve o anda kullanıcıya gönderilebilir. Verilmiş, sadece form gönderme üzerine oluşturmaktan daha karmaşık, ancak Fuzzy76'nın dediği gibi, HTTP protokolünün bir sınırlamasına karşısınız. Bunu yapmak JavaScript tabanlı bir çözüm yapmaya çalışmaktan daha kolay olabilir.

2
Chris Cohen

Ben bu şekilde başardım Drupal Jquery/JS üzerinden Yanıtım burada -> Ben JS ile başardım, Burada cevabımı iyi -> https://stackoverflow.com/ sorular/822707/php-üretmek-file-için-indir-sonra-yönlendirme/25843144 # 25843144

0
Vaibhav Jain