【问题标题】:How do I allow download of a file in drupal?如何允许在 drupal 中下载文件?
【发布时间】:2018-03-22 13:40:48
【问题描述】:

我有一份报告,我想让用户将当前数据提取到可下载的 .csv 文件中。

我目前正在使用 unmanaged_write_submit 但这只是将 csv 打印到屏幕上,用户必须右键单击并另存为。我希望通过单击按钮下载实际文件来使其尽可能简单。

$page['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Download Report',
    '#submit' => array('test_unmanaged_write_submit'), 
    );


function test_unmanaged_write_submit($form, &$form_state) {
    //$data is pulling the .csv/query data
    $data = get_array_data($form,&$form_state); 
    $destination = !empty($form_state['values']['destination']) ? $form_state['values']['destination'] : NULL;

    // With the unmanaged file we just get a filename back.
    $filename = file_unmanaged_save_data($data, $destination, FILE_EXISTS_REPLACE);
    if ($filename) {
        $url = file_create_url($filename);
        $_SESSION['file_example_default_file'] = $filename;
        drupal_set_message(t('Saved file as %filename (accessible via !url, uri=<span id="uri">@uri</span>)', array(
       '%filename' => $filename,
       '@uri' => $filename,
       '!url' => l(t('this URL'), $url),
    )));
    }
    else {
        drupal_set_message(t('Failed to save the file'), 'error');
    }
}

但这仅提供指向在屏幕上显示 .csv 的网页的链接。是否有另一种 drupal 函数或方法可以强制在 php 中下载文件?

【问题讨论】:

    标签: php drupal drupal-7


    【解决方案1】:

    我使用 Drupal 已经有一段时间了,但基于here提供的答案。

    您可以将 $form_state 数组中的重定向变量设置为文件的 URL。所以基本上只需将$url 从您的呼叫中取出到file_create_url 并将其粘贴到重定向中:

    $form_state['redirect'] = $url;
    

    如果这不能解决问题,您可以按照here 的描述使用纯 PHP 来完成。

    【讨论】:

    • 我设法让文件强制下载。但是,它是作为“资源”类型而不是 csv 下载的。即使我更新了 Drupal 7 中的标题: drupal_add_http_header('Content-type', 'text/csv');
    • 你是用什么方法强制下载的?
    • 在 $form_state 中设置重定向变量并获取 url
    • 我不确定drupal_add_http_header 是否通过重定向持续存在,但如果它直接链接到 .csv 并作为资源提供,那么这听起来像是一个 Web 服务器问题(例如 apache/nginx),或许可以试试纯 php 方法。
    • 强制 php 方法有效,但它甚至没有加载页面就被调用。按钮回调是 export_to_csv 函数所在的位置,但它在页面加载时被调用。你知道这是为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2020-09-09
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多