Как я загружаю файл JPG с сервера?

Я записал пользовательский модуль, в котором у меня есть кнопка загрузки как данный ниже.

$form['topics_info_graph']['download_graph'] = array(
 '#type'  => 'button',
 '#value' =>  t('Download Graph'),
 '#button_type' => 'button',
 '#ajax' => array(
   'callback' => 'digitaliq_bckgrd_variable_ajax_download_callback', 
   'wrapper' => 'download_graph',
   'event' => 'click',
 ),
);

Onclick этой кнопки, я должен загрузить изображение jpg, которое расположено во временной папке. Я могу, определяют имя файла и путь, Не уверенный, как загрузить. какая-либо справка?

function digitaliq_bcgrd_variable_file_download($filename) {
  $temporary_directory = variable_get('file_public_path', conf_path().'/files').'/tmp';
  $temp_path = $temporary_directory . '/';
  // Download logic should come here, any help?
}
0
05.01.2020, 15:43
1 ответ

Можно установить заголовки ответа из кода PHP для инициирования загрузки браузера файла, например, что-то как:

function digitaliq_bcgrd_variable_file_download($filename) {
  $tmp = variable_get('file_public_path', conf_path().'/files').'/tmp';
  $filepath = $tmp . '/'. $filename;
  if ($data = file_get_contents($filepath)) {
    $file = new stdClass();
    $file->contents = $data;
    $file->filename = $filename;
    return EXAMPLE_serve_download($file);
  }
  drupal_not_found();
}


/**
 * Serve a file for download
 * @param $file
 * An object keyed with filename and contents
 */
function EXAMPLE_serve_download($file, $type = 'application/octet-stream') {

  if (empty($file->contents)) {
    drupal_not_found();
  }

  $headers = array(
    'Content-Type'              => $type,
    'Content-Disposition'       => 'attachment; filename="' . $file->filename . '"',
    'Content-Transfer-Encoding' => 'binary',
    'Pragma'                    => 'no-cache',
    'Cache-Control'             => 'must-revalidate, post-check=0, pre-check=0',
    'Expires'                   => '0',
    'Accept-Ranges'             => 'bytes'
  );
  if (ob_get_level()) {
    ob_end_clean();
  }
  foreach ($headers as $name => $value) {
    drupal_add_http_header($name, $value);
  }

  drupal_send_headers();
  print $file->contents;
  drupal_exit();

}
0
08.03.2020, 00:49
  • 1
    Это работает на вызов Ajax? Заметьте, что OP использует свойство "обертки", и что возвратило из замен обратного вызова Ajax, что присутствует в обертке. –  kiamlaluno♦ 03.01.2013, 09:26
  • 2
    Вышеупомянутое решение не работает в вызове ajax, дальше помогает? А-ч –  Kiran Kumar 03.01.2013, 11:06
  • 3
    хорошо, возможно, Вы могли использовать прямую ссылку на файл вместо ajax обратного вызова? например, меню рычага с параметром имени файла или подобный. С тем же обработчиком это должно служить файлу для загрузки. –  David Thomas 03.01.2013, 11:16

Теги

Похожие вопросы