你写
此 Excel 工作表是使用 Javascript 从 HTML 表格转换而来的。
这意味着 HTML 表格在客户端已经可以作为 EXCEL 文件使用。
如果是这样,没有理由将转换后的 EXCEL 文件从客户端推送回服务器,以便客户端可以再次从服务器下载。那没有意义,并且在无用的循环上浪费带宽。
换句话说:当 EXCEL 文件已经驻留在客户端的 Javascript 内存中时,您需要做的就是将您的(Javascript 转换的)EXCEL 文件存储为基于 Javascript 的Math.random() 之类的文件名。至于一种简单的文件保存方法,HTML5 的文件保存功能(作为许多方法之一)可能会成为您最好的朋友。
想一想:如果您坐在家里的沙发上,您不会开车上班只是为了能够开车回家并从家里厨房的冰箱里拿啤酒,对吗?对,你就呆在家里,走进厨房去拿啤酒。 ;)
这里也一样:如果你在客户端转换它并且客户端在他的计算机内存中有文件,让他将它保存到他的磁盘上。不要强迫他上传整个文件以便他可以下载它……如前所述:Javascript 的 Math.random() 使您能够生成一个随机数,您可以使用它来创建随机文件名。
编辑
基于OP's question in comment:
但是如何根据月份以动态文件名保存这些下载的文件。
要根据月份创建文件名,您可以像这样使用 Javascript 的日期:
var now = new Date();
var month = now.getMonth();
如果您正在寻找有关如何在客户端存储文件的提示,您可能需要深入了解:
如果您想在服务器端处理它并使用 PHP 将文件推送到客户端,并使用您自己的文件名(基于 year-month-day),您可以这样:
<?php
$realname = './data.xls';
if (file_exists($realname ))
{
$randname = 'YourExcelFilename'.gmdate('Y-m-d').'.xls';
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename='.$randname);
header('Content-Length: '.filesize($realname));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush();
readfile($file);
}
exit();
?>
(EDIT 2:通过删除2个不必要的标头thanks to a comment by @Herbert更正了上面的示例)
如果您想要更多替代解决方案,您可能需要查看the two questions I linked in my first comment 的答案,因为您的问题是这些问题的可能重复