我在 javascript 中创建了这个函数,它在 iframe 上发送到服务器:
function download(url, datas){
if(url && datas){
var inputs = '', value,
iframe = '<iframe name="iframeDownload" id="iframeDownload" width=0 height=0></iframe>';
$(iframe).appendTo('body');
datas.forEach(function(data){
name = encodeURI(data.get('name'));
value = encodeURI(data.get('value'));
inputs+='<input name="'+name+'" value="'+value+'"/>';
});
$('<form action="'+url+'" method="post" target="iframeDownload">'+inputs+'</form>').appendTo('body').submit().remove(); // .appendTo and remove() are needed for firefox
$(iframe).remove();
};
};
我正在对输入名称和值进行编码以便能够发送数据。在我的服务器上,我使用的是 php,因此要对其进行解码,您需要: rawurldecode。如果将输入的名称定义为“fileName”和“file”,则可以这样写:
$fileName = rawurldecode($_POST['fileName']);
$file = rawurldecode($_POST['file']);
之后,要强制下载,您需要发送正确的标头。我正在使用这个功能:
function download($filename, $file) {
header('Content-disposition: attachment; filename="'.$filename.'"');
header('Content-Type: application/force-download');
header('Content-Length: '. filesize($file));
readfile($file);
}
如果您不需要从 javascript 发送文件,因为它是在服务器端创建的,只需将文件的路径添加到下载功能。
如果您使用的是 PHP,您可以使用 fpdf 生成 pdf。