mik*_*e23 2 javascript php ajax jquery download
我在php中动态生成一个文件,如下所示:
$attachment_url = "http://www.mysite.com/file.jpg";
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="'.basename( $attachment_url ).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile( $attachment_url );
Run Code Online (Sandbox Code Playgroud)
然后,这些数据通过jQuery.ajax传递
我想在成功时打开文件下载对话框.
现在我有这个:
success: function(data, textStatus, XMLHttpRequest) {
var win = window.open();
win.document.write(data);
}
Run Code Online (Sandbox Code Playgroud)
这会打开一个新窗口并显示原始文件数据.相反,我想要打开一个下载对话框.
我不确定我是否拥有所有必要的信息,但您可以通过3个文件实现目标.
的download.php
$file = $_GET['file'];
$path = '/var/www/html/';
$attachment_url = $path.$file;
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="'.basename( $attachment_url ).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile( $attachment_url );
Run Code Online (Sandbox Code Playgroud)
api.php
if (isset($_GET['generate_file'])) {
$str = '';
for($i = 0; $i < 10; $i++) {
$str .= "Number $i\n";
}
$name = 'file.txt';
$path = '/var/www/html/';
file_put_contents($path.$name, $str);
echo $name;
}
Run Code Online (Sandbox Code Playgroud)
ajax.html
<script type="text/javascript">
$.ajax({
url: '/api.php',
data: {
generate_file: true
}
})
.done(function(name) {
$('#results').append('<a href="/download.php?file=' + name + '" id="link">' + name + '</a>');
document.getElementById('link').click(); // $('#link').click() wasn't working for me
$('#link').remove();
});
</script>
<div id="results"></div>
Run Code Online (Sandbox Code Playgroud)