下载保存文件保存到本地的两种实现方法,flas

作者:澳门金莎娱乐网站

Content-Disposition 消息头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。

<signatory>

$zip = new ZipArchive;$res = $zip->open('test.zip', ZipArchive::CREATE);if ($res === TRUE) {$zip->addFromString('test.txt', 'file content goes here');$zip->close();echo 'ok';} else {echo 'failed';}

Content-Disposition消息头最初是在MIME标准中定义的,HTTP表单及POST 请求只用到了其所有参数的一个子集。只有form-data以及可选的namefilename三个参数可以应用在HTTP场景中。

下面的例子将site-control策略配置为可加载本服务器中其它的text/x-cross-domain-policy文件作为跨域策略文件。

PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。这里整理一下常用的示例供参考。

<?php function downfile{$filename=$fileurl;$file = fopen($filename, "rb"); Header( "Content-type: application/octet-stream "); Header( "Accept-Ranges: bytes "); Header( "Content-Disposition: attachment; filename= 4.doc"); $contents = "";while (!feof { $contents .= fread($file, 8192);}echo $contents;fclose; }$url="url地址";downfile;?>

2.2.1 site-control:通过检查该节点的属性值,确认是否可以允许加载其他策略文件。[如果该策略文件并非主策略文件,则此节点被自动忽略]

$zip->addFile("images/image.txt","image.txt");

<?php function downfile(){ $filename=realpath("resume.html"); //文件名 $date=date("Ymd-H:i:m"); Header( "Content-type: application/octet-stream "); Header( "Accept-Ranges: bytes "); Header( "Accept-Length: " .filesize($filename)); header( "Content-Disposition: attachment; filename= {$date}.doc"); echo file_get_contents($filename); readfile($filename); }downfile();?>

allow-http-request-headers-from包含三个属性:

如果添加的文件跟PHP文件不是在同一路径下,addFile函数的参数如果带有路径,则压缩的文件里包含的是带有路径的文件压缩,而又不希望带有路径,则需要该函数的第二个参数

<?php function downfile{ ob_start(); $filename=$fileurl; $date=date("Ymd-H:i:m"); header( "Content-type: application/octet-stream "); header( "Accept-Ranges: bytes "); header( "Content-Disposition: attachment; filename= {$date}.doc"); $size=readfile($filename); header( "Accept-Length: " .$size);} $url="url地址"; downfile;?> 

</cross-domain-policy>

三、文件追加内容添加到zip文件

header("Content-Disposition:attachment);

3) site-control标签的permitted-cross-domain-policies属性检测:根据业务的实际需求及可行性,对该属性做相应设置。禁止将该属性值设置为“all”。

function addFileToZip($path, $zip) { $handler = opendir; //打开当前文件夹由$path指定。 /* 循环的读取文件夹下的所有文件和文件夹 其中$filename = readdir是每次循环的时候将读取的文件名赋值给$filename, 为了不陷于死循环,所以还要让$filename !== false。 一定要用!==,因为如果某个文件名如果叫'0',或者某些被系统认为是代表false,用!=就会停止循环 */ while (($filename = readdir) !== false) { if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作 if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归 addFileToZip($path . "/" . $filename, $zip); } else { //将文件加入zip对象 $zip->addFile($path . "/" . $filename); } } } @closedir; $zip = new ZipArchive(); if ($zip->open('images.zip', ZipArchive::OVERWRITE) === TRUE) { addFileToZip('images/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 $zip->close(); //关闭处理的zip文件

问题:1:如果文件没有以下载文件的形式展示而是以直接在浏览器中打开了,可添加如下代码:

<cross-domain-policy>

$zip = new ZipArchive;/*$zip->open这个方法第一个参数表示处理的zip文件名。第二个参数表示处理模式,ZipArchive::OVERWRITE表示如果zip文件存在,就覆盖掉原来的zip文件。如果参数使用ZIPARCHIVE::CREATE,系统就会往原来的zip文件里添加内容。如果不是为了多次添加内容到zip文件,建议使用ZipArchive::OVERWRITE。使用这两个参数,如果zip文件不存在,系统都会自动新建。如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE*/if ($zip->open('test.zip', ZipArchive::OVERWRITE) === TRUE){$zip->addFile('image.txt');//假设加入的文件名是image.txt,在当前路径下$zip->close();}

第一种:

2.2.4 allow-http-request-headers-from:此节点授权第三方域flash向本域发送用户定义的http头。

$zip = new ZipArchive;//新建一个ZipArchive的对象/*通过ZipArchive的对象处理zip文件$zip->open这个方法的参数表示处理的zip文件名。如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE*/if ($zip->open('test.zip') === TRUE){$zip->extractTo;//假设解压缩到在当前路径下images文件夹的子文件夹php$zip->close();//关闭处理的zip文件}

在HTTP场景中,第一个参数或者是inline(默认值,表示回复中的消息体会以页面的一部分或者整个页面的形式展示),或者是attachment(意味着消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将filename的值预填为下载后的文件名,假如它存在的话)。

本文将着重介绍crossdomain.xml文件的配置方法及不同配置对flash跨域的影响。

一、解压缩zip文件

或者:

·secure:作用及用法与allow-access-from节点中的secure相同。

二、将文件压缩成zip文件

第二种:

一、简介

四、将文件夹打包成zip文件

·to-ports:该属性值表明允许访问读取本域内容的socket连接端口范围。可使用to-ports="1100,1120-1125"这样的形式来限定端口范围,也可使用通配符表示允许所有端口。

2.2.3 allow-access-from-identity:该节点配置跨域访问策略为允许有特定证书的来源跨域访问本域上的资源。每个allow-access-from-identity节点最多只能包含一个signatory子节点。形如:

位于www.a.com域中的SWF文件要访问www.b.com的文件时,SWF首先会检查www.b.com服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;若crossdomain.xml文件存在,且里边设置了允许www.a.com域访问,那么通信正常。所以要使Flash可以跨域传输数据,其关键就是crossdomain.xml。

每个site-control标签有且仅有属性permitted-cross-domain-policies,该属性指定相对于非主策略文件的其他策略文件的加载策略。permitted-cross-domain-policies属性值有如下情况:

也可以单独在某路径下放置仅对该路径及其子路径生效的crossdomain.xml配置文件,这需要在flash的AS脚本中使用如下语句来加载该配置文件:[具体的加载权限限制,将受后文中site-control策略的影响]

自flash 10以后,如有跨域访问需求,必须在目标域的根目录下放置crossdomain.xml文件,且该根目录下的配置文件称为“主策略文件”。若不存在主策略文件,则该域将禁止任何第三方域的flash跨域请求。

by-content-type:只允许使用loadPolicyFile方法加载HTTP/HTTPS协议下Content-Type 为text/x-cross-domain-policy的文件作为跨域策略文件。

 <certificate fingerprint="01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:67" fingerprint-algorithm="sha-1"/>

allow-access-from节点授权第三域提取本域中的数据,而 allow-http-request-headers-from 节点授权第三方域将数据以http头的形式发送到本域中。[简而言之,allow-access-from是控制读取权限,allow-http-request-headers-from是控制以http头形式的写入权限]

本文由澳门金莎娱乐网站发布,转载请注明来源

关键词: