如何允许在drupal中下载文件?

时间:2018-03-22 13:40:48

标签: php drupal drupal-7

我有一个报告,我希望允许用户将当前数据提取到可下载的.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函数或强制文件下载的方法吗?

1 个答案:

答案 0 :(得分:1)

我使用Drupal已经有一段时间了但是根据提供的答案confusing message

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

$form_state['redirect'] = $url;

如果不能解决问题,可以使用纯PHP进行操作,如here所述。