将网页重定向到文件

时间:2011-07-29 20:24:49

标签: javascript html apache redirect

假设一个网页显示一个表格,但可以选择将其下载为Excel表格。该选项显示为提交表单的按钮(包含创建相同报表所需的参数,但对于Excel)。

<form action="makereport.blah">
<!-- Some parameters -->
<input type="button" value="Export to Excel" onClick="submit();"/>
</form>

最后一步仍然是将浏览器定向到创建的Excel工作表。

我看到三种可能性:

  1. 在表单的“操作”页面中,使用OnLoad事件:在JavaScript中重写创建的文件路径的URL并重新加载页面

  2. 在HTTP标头中:重定向到文件的URL(使用Redirect命令)

  3. 使用iframe,其中src是目标文件

  4. 那些似乎有些 hackish ,但我过去曾经使用过它们。 这通常是怎么做的?

    (注意,我用来生成HTML(和Excel工作表)的语言是一个内部解决方案。所以如果PHP有一些东西,我只需要移植它。)

5 个答案:

答案 0 :(得分:3)

可能性4(正确的一个):此表单指向的PHP脚本应该发送Content-type: application/vnd.ms-excel header然后Excel文件的内容。如果它是磁盘上的实际文件,请使用readfile,否则只需echo Excel数据。如果要指定要下载的文件名,还可以发送Content-Disposition: attachment; filename='filename'标题。

答案 1 :(得分:1)

处理表单发布的脚本/代码(服务器端)可以生成Excel电子表格。然后,您可以直接返回电子表格(使用正确的HTTP标头,如果文件是直接加载的),而不是使用HTML响应(或某种重定向)进行回复。

PHP中的一个例子:

<?php

// generate spreadsheet in file
$file = do_something_to_generate_spreadsheet();

// specifies it is an excel spreadsheet response
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="' . $file . '"'); // filename
header('Content-Length: ' . filesize($file)); // length

readfile($file); // sends file to client

?>

答案 2 :(得分:0)

为什么要有第二页呢?将makereport.blah文件本身设为xls,而不是另一个HTML文档。

答案 3 :(得分:0)

您可以在新文件中使用DATAURI方案以base64模式插入文件。我今晚要制作一个剧本。

答案 4 :(得分:0)

使用webtoolkit.info中的base64代码并反汇编XML / XLS文件我试过制作一个脚本来强制下载空中文件。我创建一个Windows对象,当它打开时,然后插入用base64编写的XML / XLS代码。这个方法是dataURI的黑客。我没有在文件下载时输入名称。 我试过google chrome。 here文件的小说。

感谢您的关注。