it-swarm-vi.com

Có thể chuyển hướng sau khi "đẩy" một tập tin cho người dùng?

Tôi đã có một thiết lập trong đó một trang web tạo ra các phân tích nội bộ về việc sử dụng trang web. Người dùng có thể yêu cầu tải xuống các phân tích cá nhân của họ và vì thông tin này rất nhạy cảm nên tôi không tạo bất kỳ tệp nào, tôi tạo tệp CSV trong một biến và sau đó "Đẩy" nó tới người dùng bằng cách này:

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

Điều này khiến trình duyệt của người dùng bật hộp thoại "lưu tệp" và người dùng sẽ nhận được tệp được tạo ở cuối của họ. Điều này hoạt động tốt, ngoại trừ quản trị viên của trang web có thể kích hoạt 'xuất khẩu phá hoại' - và trong tình huống đó tôi có một mẫu xác nhận phụ mà quản trị viên cần chấp nhận trước khi thực hiện xuất khẩu phá hoại.

Vấn đề là thói quen "Đẩy tải xuống" này kết thúc quá trình xử lý trang Drupal. Không xuất hiện bất kỳ cách nào để chuyển hướng quản trị viên đến một số trang sau khi thói quen tải xuống Push được gọi. hộp thoại lưu tập tin xuất hiện bởi trình duyệt của họ, nhưng chúng vẫn ở trên mẫu xác nhận.

Tôi đã thử đi theo con đường nhiều bước, nhưng sau một ngày lẩn quẩn với những chuyển hướng lạ, tôi đã thoát khỏi sự nhầm lẫn đó. Bắt đầu nhìn vào logic hình thức nhiều bước của ChaosTool. Nhưng một cái gì đó cho tôi biết rằng vấn đề thực sự là "Tải xuống đẩy" này là một kẻ giết người theo quy trình có hướng dẫn.

Có lẽ hộp thoại xác nhận jquery chặn nhấp vào nút 'Xuất' ban đầu, thực hiện xác nhận hoàn toàn bằng javascript, quên có biểu mẫu xác nhận php/FAPI và khi người dùng xác nhận trong jquery tôi có thể lập trình gửi Tôi đã chặn?

7
Blake Senftner

Dường như có một số mánh khóe, không biết chúng hoạt động tốt như thế nào bên trong Drupal.

Xem ví dụ http://www.willmaster.com/blog/automation/one-link-doad-and-redirect.php

2
Berdir

Theo tôi biết, điều đó là không thể. Bạn có thể gửi nội dung (trong trường hợp của bạn là một tệp) hoặc chuyển hướng. Không phải cả hai. Đây là một hạn chế của giao thức HTTP

3
Fuzzy76

Tôi nghĩ rằng cách tốt nhất của bạn có thể là tạo mã thông báo khi người dùng gửi biểu mẫu và sau đó có mã thông báo lưu trữ tất cả thông tin cần thiết để tạo tệp CSV. Có biểu mẫu chuyển hướng người dùng đến trang thích hợp và sử dụng drupal_set_message () để cung cấp liên kết có chứa mã thông báo.

Khi nhấp vào liên kết, tệp CSV có thể được tạo và gửi cho người dùng tại thời điểm đó. Cấp, nó phức tạp hơn so với việc tạo nó trên biểu mẫu gửi, nhưng như Fuzzy76 nói, bạn đang chống lại giới hạn của giao thức HTTP. Làm theo cách này có thể đơn giản hơn là cố gắng tạo ra một giải pháp dựa trên JavaScript.

2
Chris Cohen

Đây là cách tôi đạt được nó trong Drupal qua Jquery/JS Câu trả lời của tôi ở đây -> Tôi đã đạt được nó thông qua JS, trả lời tốt câu trả lời của tôi ở đây -> https://stackoverflow.com/ câu hỏi/822707/php-created-file-for-download-then-redirect/25843144 # 25843144

0
Vaibhav Jain