用Javascript开机自检并重定向以下载文件

jmcollin92

我读过(在本网站或其他网站的文章很多不形重定向,以便用POST应用/ CSVjQuery.post(),PHP和重定向,...),但没有任何有价值的解决方案。我的问题如下:

  1. 在我的网站(html5,JQuery)中,有一个表。该网站的功能是将表格导出为csv文件,该文件可以下载,
  2. 此功能实现如下:

    2.1调用一个javascript来提取表的数据,

    2.2此JS重定向到php服务,并将数据作为参数传递。代码如下:

var url= jmcnet.request.getOrigin()+'/commons/php/dt_csv_export.php' ; location.href = url+"?action=generate&csv_type=export_task&csv_data=" +encodeURIComponent(csv);

2.3 php脚本格式化输入(csv_data参数),编写一个temporay文件并返回临时文件的内容。代码如下:

$h = @fopen($csv_file_name, 'w');
      fputcsv($h, $csv_row, ',', '"');
      fclose($h);
      // export file content to JS
      header('Content-Encoding: UTF-8');
   header('Content-Type: text/ csv; charset =UTF-8');
   header('Content-Disposition: attachment; filename=export-table.csv');
   header(' Pragma: no-cache');
   echo "\xEF\xBB\xBF"; // UTF-8 BOM
   readfile($csv_file_name);

2.4 php文件删除(取消链接)临时文件并退出,

我的问题是,当表很长时,调用的URL无效,并且对Php的JS调用已关闭。

因此,我想象以下三种解决方案,但是没有一个是显而易见的,并且都导致其他问题:

  1. S1:不要在JS中执行GET而是POST。因此,csv_data的大小不再重要。问题是,调用成功后,我将在JS var中获得csv文件的内容,但我不知道或找不到如何重定向到JS var中包含内容的页面?我估计这样做会丢失所有标头信息。
  2. S2:在JS中压缩csv_data参数,然后在Php中将其解压缩。我只是不知道该怎么做,如果可能的话....
  3. S3:通过POST调用php。修改Php以返回临时文件的URL,然后在JS中将其重定向到此temporay URL。问题是我的Php必须将文件生成到Internet上直接可见的目录中,文件名必须是唯一的,并且在浏览器读取文件后,无法简单地删除该文件(而且我讨厌cron或其他东西) )。

我确定我不是第一个遇到此问题的人,所以我需要您的帮助,以了解解决此问题的最佳方法。

科雷

我认为您可能会使这个问题变得过于复杂。不需要所有的JS重定向内容,您只需将表格action属性指向csv_export php代码并使用POST发送数据即可。

如果需要,您可以通过编辑php.ini中的post_max_size选项来修改发布请求的最大大小。这是我的样子:

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M

至于写入临时文件,php内置了I / O流来处理。为了您的目的,您可能需要使用php:// memory或php:// temp(有关此处的更多信息:http : //www.php.net/manual/zh-cn/wrappers.php.php

因此您可以执行以下操作:

示例HTML:

<html>
<head>
<!-- include jquery because you say you are using it -->
<script src="//code.jquery.com/jquery-1.10.2.min.js"></script>

<script>
//just a dummy function to represent your js to extract csv data from a table
function extract_table_data(){
    var csv = "field1,field2,field3\n\
value1,value2,value3\n\
value4,value5,value5";
    return csv;
}

$( document ).ready(function() {
    //export link click handler
    $('#export_link').click(function() {
        $('#csv_data').val(extract_table_data());
        $('#theform').submit();
    });
});
</script>
</head>
<body>
<a id='export_link'>Export CSV</a>
<form id='theform' method='post' action='dropcsv.php'>
    <input type='hidden' name='csv_data' id='csv_data'/>
</form>
</body>
</html>

dropcsv.php

//filename for our csv attachment
$export_filename = 'thefile.csv';
//grab csv data
$csv_data = $_POST['csv_data'];
//open file in memory
$f = fopen('php://memory', 'w'); //use php://temp if you want a tmp file instead
//load up csv file
fwrite($f, $csv_data);
// go back to the beginning of the file
fseek($f, 0);
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="'.$export_filename.'"');
fpassthru($f);
fclose($f);

当然,不要忘记添加错误检查并清理输入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无需使用表格即可开机自检,然后下载文件

来自分类Dev

从重定向URL下载文件

来自分类Dev

X accel重定向未下载文件

来自分类Dev

尝试使用WebClient下载文件时遇到重定向重定向的问题

来自分类Dev

从Servlet下载文件-Chrome警告+下载后如何重定向用户?

来自分类Dev

使用HTTPS从(GitHub)URL Perl下载二进制文件并重定向

来自分类Dev

用PhantomJS下载文件

来自分类Dev

用Playwright下载文件

来自分类Dev

下载文件,然后重定向到另一页

来自分类Dev

使用主干js下载文件后如何重定向到其他视图?

来自分类Dev

javascript按钮下载文件

来自分类Dev

在 Mac 上安装 Java 8:为什么我无法下载文件?它重定向到登录

来自分类Dev

用php和polymer下载文件

来自分类Dev

用Ruby代码下载文件

来自分类Dev

用ajax和php下载文件

来自分类Dev

用jQuery单击按钮取消表单并重定向页面

来自分类Dev

.htaccess并重定向不存在的文件和目录

来自分类Dev

使用HERE文件并重定向命令的输出

来自分类Dev

如何批处理sed文件并重定向结果

来自分类Dev

设置window.location以下载文件时警告

来自分类Dev

设置window.location以下载文件时警告

来自分类Dev

首先运行FileResult以下载文件,然后运行RedirectToAction

来自分类Dev

从JavaScript中的字节下载文件

来自分类Dev

如何使用JavaScript强制下载文件?

来自分类Dev

使用JavaScript从链接自动下载文件

来自分类Dev

使用JavaScript在Safari中下载文件

来自分类Dev

我如何制作javascript下载文件?

来自分类Dev

Apache重写并重定向

来自分类Dev

检测国家并重定向