• 关于

    $.get()方法

    的搜索结果

问题

jQuery 获取和设置下拉选项框(select)的方法

JQuery获取和设置Select选项 获取Select : 获取select 选中的 text : $("#ddlRegType").find("option:selected").text(); 获取select选中的...
a123456678 2019-12-01 20:17:09 1044 浏览量 回答数 1

问题

关于jquery的$.get()获取验证码的问题

提交方式是原始表单。 <script type="text/javascript"> function submitForm(){ var d...
吴孟桥 2019-12-01 19:42:48 1612 浏览量 回答数 1

问题

如何在sparkcontext.parallelize(...)。map()中执行Hive查询?

我无法执行下面的代码。此代码尝试使用SparkContext runJob()方法内的SparkSession从hive表执行hive查询。 val lines = sparkSession.sparkContext.parallelize...
社区小助手 2019-12-01 19:28:46 1032 浏览量 回答数 1

阿里云域名特惠专场,热门域名1元抢购!

全网低价特惠,顶级域名低至1元,更有96元/年服务器限时抢购!

问题

hbase批量查批量写报错org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException

org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException at org.apache.hadoop.hbase.client.AsyncProcess$Batch...
hbase小能手 2019-12-01 20:25:38 3310 浏览量 回答数 1

问题

Java中list集合的问题

for(int i=0;i<all.size();i++) { if(all.get(i).getSno().equals(sno)) { ...
蛮大人123 2019-12-01 20:20:37 985 浏览量 回答数 1

回答

jQuery 的实现原理 var jQuery = function(selector, context) { return new jQuery.fn.init(selector, context); }; 1)jQuery 采用的是构造函数模式进行开发的,jQuery 是一个类 2)上面说的常用的方法(CSS、属性、筛选、事件、动画、文档处理)都是定义在 jQuery.prototype 上的 ->只有 jQuery 的实例才能使用这些方法 2、选择器/筛选 1)我们的选择器其实就是创造 jQuery 类的一个实例 ->获取页面中元素用的 jQuery(); -> $() $()就是 jQuery 的选择器,就是创建 jQuery 这个类的一个实例 2)执行的时候需要传递两个参数 selector -> 选择器的类型 一般都是string类型 context -> 获取的上下文 第二个参数一般不传,不传默认为document $("#div1") $(".box") $("#div1 span") -> $("span", div1) console.log($("#div1 span:first")) 3)通过选择器获取的是一个 jQuery 类的实例->jQuery 对象 console. log($( #div1")) [jQuery对象的私有的属性] $("#div1")[0] -> div1这个元素对象 S(#div1").selector -> "#div1" S(#div1").context -> document ("#div1").length-)1 获取元素的个数 [jQuery对象的公有的属性] jQuery.prototype 4)我们获取的是 jQuery 对象(他是 jQuery 的实例)不是我们的原生 js 对象 jQuery:$("#div1") JS:document.getElementById("div1") 原生JS的对象不能直接的使用jQuery的方法,同理,jQuery的对象也不能使用原生js的方法 $("#div1").className = "box"; no document.getElementById("div1").addClass(); 5)互相转化 var $oDiv =$("#div1") var oDiv = document.getElementById("div1") Js->jQuery: $(oDiv).addClass() jQuery->Js: $oDiv[o]/ $oDiv.get(0) 3、核心 $(document).ready(function() { //HTML结构加载完成就执行这里的代码 }); $(function() {}); each $("selector").each( function(){})遍历获取的这些元素 jQuery.prototype $.each(ary)遍历数组中的每一项 jQuery.each 我们的 jQuery 不仅仅是一个类(在它的原型上定义了很多的方法,每一个 jQuery 的实例都可以使用这些方法),它还是一个普通的对象,在 jQuery 本身的属性中还增加了一系列的方法:Ajax、each、工具 $.unique(ary) $.ajax() $.extend()->把 jQuery当做一个对象,给它扩展属性->完善类库 $.fn.extend()->在 jQuery的原型上扩展属性和方法->编写 jQuery插件 $.extend({ a: function(){ } }) $.a() $.fn.extend({ b: function(){ } }) $().b()
茶什i 2019-12-02 03:21:18 0 浏览量 回答数 0

问题

用php仿照js写的一个加密方法,出现问题

原本的js是一段加密的方法 function checkform() { var dcode; var dcode1; var dcode2; dcode=document.form1.pwd.value; dcode1=""; dcode...
小旋风柴进 2019-12-01 20:08:47 1139 浏览量 回答数 1

回答

基于 PHP/CURL 编写的类库, 使用方法见注释.直接使用, 不用处理Cookie(程序自动会处理, Cookie信息保存于调用类时传递的参数所指定的文件里).<?php /** * Author: dds_feng * Email: dds_feng@qq.com * * Example: * $http = new HttpClient(__DIR__.'/cookie.ck'); * $http->SetReferer('http://foo.com');//set request referer * echo $http->Get('http://foo.com/');//get * $http->SetProxy('http://127.0.0.1:8888');//set http proxy * echo $http->Post('http://bar.com/xxx', array('a'=>'123', 'b'=>'456'));//post **/ class HttpClient{ private $ch; function __construct($cookieJar){ $this->ch = curl_init(); curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36');//UA curl_setopt($this->ch, CURLOPT_TIMEOUT, 60);//timeout curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, TRUE);//follow redirection curl_setopt($this->ch, CURLOPT_AUTOREFERER, true); curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, FALSE);//ssl curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($this->ch, CURLOPT_COOKIEJAR, $cookieJar);//cookie jar curl_setopt($this->ch, CURLOPT_COOKIEFILE, $cookieJar); } function __destruct(){ curl_close($this->ch); } final public function SetProxy($proxy='http://127.0.0.1:8888'){ //curl_setopt($this->ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); curl_setopt($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);//HTTP proxy //curl_setopt($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);//Socks5 proxy curl_setopt($this->ch, CURLOPT_PROXY, $proxy); } final public function SetReferer($ref=''){ if($ref != ''){ curl_setopt($this->ch, CURLOPT_REFERER, $ref);//Referrer } } final public function SetCookie($ck=''){ if($ck != ''){ curl_setopt($this->ch, CURLOPT_COOKIE, $ck);//Cookie } } final public function Get($url, $header=false, $nobody=false){ curl_setopt($this->ch, CURLOPT_POST, false);//GET curl_setopt($this->ch, CURLOPT_URL, $url); curl_setopt($this->ch, CURLOPT_HEADER, $header);//Response Header curl_setopt($this->ch, CURLOPT_NOBODY, $nobody);//Response Body return curl_exec($this->ch); } final public function Post($url, $data=array(), $header=false, $nobody=false){ curl_setopt($this->ch, CURLOPT_URL, $url); curl_setopt($this->ch, CURLOPT_HEADER, $header);//Response Header curl_setopt($this->ch, CURLOPT_NOBODY, $nobody);//Response Body curl_setopt($this->ch, CURLOPT_POST, true);//POST curl_setopt($this->ch, CURLOPT_POSTFIELDS, http_build_query($data));//data return curl_exec($this->ch); } final public function getError(){ return curl_error($this->ch); } } // vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4:
蛮大人123 2019-12-02 01:53:32 0 浏览量 回答数 0

回答

思路不对,或者说你没好好看文档,没有正确理解$.get 和 $(element).load方法。 $.get('test.php', {Xiaopeng: 'text'}, function(data){ console.log(data); }); 这个时候实际请求地址为test.php?Xiaopeng=text,而返回的data并不是空的,但是`$("#right-table").load("test.php");`这句的意思是获取test.php的返回内容并放入#right-table,此时Xiaopeng=text这个参数并不存在,所以只能得到空数组。以下两种方式都是正解: //方法1 $.get('test.php', {Xiaopeng: 'text'}, function(data){ $("#right-table").html(data); }); //方法2 $("#right-table").load('test.php?Xiaopeng=' + $("#selectbtn1").text()); 建议使用Firefox(需要firebug插件)或chrome浏览器,使用相应的功能可以检测ajax请求,你会发现你原先的代码是发送了两次不同的请求,而你输出的第二次请求的返回值,同时第二次请求确实没有任何数据被发送。
西秦说云 2019-12-02 02:57:13 0 浏览量 回答数 0

回答

withColumnRenamed仅重命名列名称,数据保持不变。如果需要更改行上下文,可以使用以下方法之一: import sparkSession.implicits._import org.apache.spark.sql.functions._ val inputDf = Seq("to_be", "misc").toDF("c1")val resultd1Df = inputDf .withColumn("c2", regexp_replace($"c1", "^to_be$", "not_to_be")) .select($"c2".as("c1"))resultd1Df.show() val resultd2Df = inputDf .withColumn("c2", when($"c1" === "to_be", "not_to_be").otherwise($"c1")) .select($"c2".as("c1"))resultd2Df.show() def replace(mapping: Map[String, String]) = udf( (from: String) => mapping.get(from).orElse(Some(from))) val resultd3Df = inputDf .withColumn("c2", replace(Map("to_be" -> "not_to_be"))($"c1")) .select($"c2".as("c1"))resultd3Df.show()输入数据帧: c1 to_be misc 结果数据框: c1 not_to_be misc
社区小助手 2019-12-02 01:47:59 0 浏览量 回答数 0

回答

几乎没有200k随机记录的基准。与预期的一样,fetchAll方法更快,但需要更多的内存。 Result : fetchAll : 0.35965991020203s, 100249408b fetch : 0.39197015762329s, 440b 使用的基准代码: setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'SELECT * FROM test_table WHERE 1'; $stmt = $dbh->query($sql); $data = array(); $start_all = microtime(true); $data = $stmt->fetchAll(); $end_all = microtime(true); $stmt = $dbh->query($sql); $data = array(); $start_one = microtime(true); while($data = $stmt->fetch()){} $end_one = microtime(true); // Second benchmark : memory usage $stmt = $dbh->query($sql); $data = array(); $memory_start_all = memory_get_usage(); $data = $stmt->fetchAll(); $memory_end_all = memory_get_usage(); $stmt = $dbh->query($sql); $data = array(); $memory_end_one = 0; $memory_start_one = memory_get_usage(); while($data = $stmt->fetch()){ $memory_end_one = max($memory_end_one, memory_get_usage()); } echo 'Result : fetchAll : ' . ($end_all - $start_all) . 's, ' . ($memory_end_all - $memory_start_all) . 'b fetch : ' . ($end_one - $start_one) . 's, ' . ($memory_end_one - $memory_start_one) . 'b '; 分享来源:stack overflow
保持可爱mmm 2020-05-11 16:40:38 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档您可以通过一系列的接口管理存储空间(Bucket)下的文件(Object)。管理文件的完整代码请参见:GitHub。 判断文件是否存在以下代码用于判断指定的文件是否存在: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $exist = $ossClient->doesObjectExist($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($exist); 文件访问权限文件的访问权限(ACL)有以下四种: 访问权限 描述 访问权限值 继承Bucket 文件遵循存储空间的访问权限。 default 私有 文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。 private 公共读 文件的拥有者和授权用户有该文件的读写权限,其他用户只有文件的读权限。请谨慎使用该权限。 public-read 公共读写 所有用户都有该文件的读写权限。请谨慎使用该权限。 public-read-write 文件的访问权限优先级高于存储空间的访问权限。例如存储空间的访问权限是私有,而文件的访问权限是公共读写,则所有用户都有该文件的读写权限。如果某个文件没有设置过访问权限,则遵循存储空间的访问权限。 设置文件访问权限以下代码用于设置指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";// 设置文件的访问权限为公共读,默认为继承Bucket。$acl = "public-read";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObjectAcl($bucket, $object, $acl);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件访问权限以下代码用于获取指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectAcl = $ossClient->getObjectAcl($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($objectAcl); 文件元信息文件元信息(Object Meta)详情请参见开发指南中的文件元信息。 设置文件元信息以下代码用于设置文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$content = file_get_contents(__FILE__);$options = array( OssClient::OSS_HEADERS => array( 'Expires' => '2012-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-self-define-title' => 'user define meta info', ));try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 修改文件元信息以下代码用于修改文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;/// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$fromBucket = "<yourFromBucketName>";$fromObject = "<yourFromObjectName>";$toBucket = "<yourToBucketName>";$toObject = "<yourToObjectName>";$copyOptions = array( OssClient::OSS_HEADERS => array( 'Expires' => '2018-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-location' => 'location', ),);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件元信息以下代码用于获取文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectMeta = $ossClient->getObjectMeta($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");if (isset($objectMeta[strtolower('Content-Disposition')]) && 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]) { print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");} else { print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");} 列举文件列举所有文件以下代码用于列举指定存储空间下的所有文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);while (true) { try { $listObjectInfo = $ossClient->listObjects($bucket, $options); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表。 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); $listPrefix = $listObjectInfo->getPrefixList(); if (!empty($listObject)) { print("objectList:\n"); foreach ($listObject as $objectInfo) { print($objectInfo->getKey() . "\n"); } } if (!empty($listPrefix)) { print("prefixList: \n"); foreach ($listPrefix as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); } } if ($nextMarker === '') { break; }} 列举指定条件的文件以下代码用于列举指定条件的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$prefix = 'dir/';$delimiter = '/';$nextMarker = '';$maxkeys = 10;$options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker,);try { $listObjectInfo = $ossClient->listObjects($bucket, $options);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");$objectList = $listObjectInfo->getObjectList(); // object list$prefixList = $listObjectInfo->getPrefixList(); // directory listif (!empty($objectList)) { print("objectList:\n"); foreach ($objectList as $objectInfo) { print($objectInfo->getKey() . "\n"); }}if (!empty($prefixList)) { print("prefixList: \n"); foreach ($prefixList as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); }} 上述例子中的$options包含的参数如下: 参数 说明 是否必需 delimiter 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 否 prefix 本次查询结果的前缀。 否 max-keys 列举文件的最大个数。默认为100,最大值为1000。 否 marker 标明本次列举文件的起点。 否 删除文件删除单个文件以下代码用于删除单个文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 删除多个文件以下代码用于批量删除文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$objects = array();$objects[] = "<yourObjectName1>";$objects[] = "<yourObjectName2>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObjects($bucket, $objects);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 拷贝文件简单拷贝以下代码用于拷贝小于1GB的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$from_bucket = "<yourFromBucketName>";$from_object = "<yourFromObjectName>";$to_bucket = $bucket;$to_object = $from_object . '.copy';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");` 拷贝大文件对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步: 通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。通过$ossClient->completeMultipartUpload提交分片拷贝任务。 以下代码用于分片拷贝: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$src_bucket = "<yourSourceBucketName>";$src_object = "<yourSourceObjectName>";$dst_bucket = "<yourDestinationBucketName>";$dst_object = "<yourDestinationObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); // 初始化分片。 $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object); $copyId = 1; // 逐个分片拷贝。 $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id); $upload_parts[] = array( 'PartNumber' => $copyId, 'ETag' => $eTag, ); // 完成分片拷贝。 $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 解冻归档文件归档类型(Archive)的文件需要解冻(Restore)之后才能读取。非归档类型的文件,不要调用restoreObject方法。 归档文件的状态变换过程如下: 归档类型的文件初始时处于冷冻状态。提交解冻操作后,服务端执行解冻,文件处于解冻中的状态。完成解冻后,可以读取文件。解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。 以下代码用于解冻归档文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->restoreObject($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 存储类型详情请参见存储类型。 符号链接创建符号链接符号链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。符号链接支持自定义元信息。 以下代码用于创建符号链接: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putSymlink($bucket, $symlink, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取符号链接指向的文件内容获取符号链接要求您对该符号链接有读权限。以下代码用于获取符号链接指向的文件内容: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $Symlinks = $ossClient->getSymlink($bucket, $symlink);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($Symlinks); 开启MD5校验MD5校验用于确保数据传输的完整性。使用MD5校验时,性能会有所损失。上传文件时默认关闭MD5校验。 以下代码用于上传文件时开启MD5校验: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$options = array(OssClient::OSS_CHECK_MD5 => true);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, __FILE__, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); putObject、uploadFile、appendObject、appendFile、multiuploadFile方法支持开启MD5校验。
2019-12-01 23:14:28 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档您可以通过一系列的接口管理存储空间(Bucket)下的文件(Object)。管理文件的完整代码请参见:GitHub。 判断文件是否存在以下代码用于判断指定的文件是否存在: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $exist = $ossClient->doesObjectExist($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($exist); 文件访问权限文件的访问权限(ACL)有以下四种: 访问权限 描述 访问权限值 继承Bucket 文件遵循存储空间的访问权限。 default 私有 文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。 private 公共读 文件的拥有者和授权用户有该文件的读写权限,其他用户只有文件的读权限。请谨慎使用该权限。 public-read 公共读写 所有用户都有该文件的读写权限。请谨慎使用该权限。 public-read-write 文件的访问权限优先级高于存储空间的访问权限。例如存储空间的访问权限是私有,而文件的访问权限是公共读写,则所有用户都有该文件的读写权限。如果某个文件没有设置过访问权限,则遵循存储空间的访问权限。 设置文件访问权限以下代码用于设置指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";// 设置文件的访问权限为公共读,默认为继承Bucket。$acl = "public-read";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObjectAcl($bucket, $object, $acl);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件访问权限以下代码用于获取指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectAcl = $ossClient->getObjectAcl($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($objectAcl); 文件元信息文件元信息(Object Meta)详情请参见开发指南中的文件元信息。 设置文件元信息以下代码用于设置文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$content = file_get_contents(__FILE__);$options = array( OssClient::OSS_HEADERS => array( 'Expires' => '2012-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-self-define-title' => 'user define meta info', ));try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 修改文件元信息以下代码用于修改文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;/// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$fromBucket = "<yourFromBucketName>";$fromObject = "<yourFromObjectName>";$toBucket = "<yourToBucketName>";$toObject = "<yourToObjectName>";$copyOptions = array( OssClient::OSS_HEADERS => array( 'Expires' => '2018-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-location' => 'location', ),);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件元信息以下代码用于获取文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectMeta = $ossClient->getObjectMeta($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");if (isset($objectMeta[strtolower('Content-Disposition')]) && 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]) { print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");} else { print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");} 列举文件列举所有文件以下代码用于列举指定存储空间下的所有文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);while (true) { try { $listObjectInfo = $ossClient->listObjects($bucket, $options); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表。 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); $listPrefix = $listObjectInfo->getPrefixList(); if (!empty($listObject)) { print("objectList:\n"); foreach ($listObject as $objectInfo) { print($objectInfo->getKey() . "\n"); } } if (!empty($listPrefix)) { print("prefixList: \n"); foreach ($listPrefix as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); } } if ($nextMarker === '') { break; }} 列举指定条件的文件以下代码用于列举指定条件的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$prefix = 'dir/';$delimiter = '/';$nextMarker = '';$maxkeys = 10;$options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker,);try { $listObjectInfo = $ossClient->listObjects($bucket, $options);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");$objectList = $listObjectInfo->getObjectList(); // object list$prefixList = $listObjectInfo->getPrefixList(); // directory listif (!empty($objectList)) { print("objectList:\n"); foreach ($objectList as $objectInfo) { print($objectInfo->getKey() . "\n"); }}if (!empty($prefixList)) { print("prefixList: \n"); foreach ($prefixList as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); }} 上述例子中的$options包含的参数如下: 参数 说明 是否必需 delimiter 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 否 prefix 本次查询结果的前缀。 否 max-keys 列举文件的最大个数。默认为100,最大值为1000。 否 marker 标明本次列举文件的起点。 否 删除文件删除单个文件以下代码用于删除单个文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 删除多个文件以下代码用于批量删除文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$objects = array();$objects[] = "<yourObjectName1>";$objects[] = "<yourObjectName2>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObjects($bucket, $objects);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 拷贝文件简单拷贝以下代码用于拷贝小于1GB的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$from_bucket = "<yourFromBucketName>";$from_object = "<yourFromObjectName>";$to_bucket = $bucket;$to_object = $from_object . '.copy';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");` 拷贝大文件对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步: 通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。通过$ossClient->completeMultipartUpload提交分片拷贝任务。 以下代码用于分片拷贝: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$src_bucket = "<yourSourceBucketName>";$src_object = "<yourSourceObjectName>";$dst_bucket = "<yourDestinationBucketName>";$dst_object = "<yourDestinationObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); // 初始化分片。 $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object); $copyId = 1; // 逐个分片拷贝。 $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id); $upload_parts[] = array( 'PartNumber' => $copyId, 'ETag' => $eTag, ); // 完成分片拷贝。 $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 解冻归档文件归档类型(Archive)的文件需要解冻(Restore)之后才能读取。非归档类型的文件,不要调用restoreObject方法。 归档文件的状态变换过程如下: 归档类型的文件初始时处于冷冻状态。提交解冻操作后,服务端执行解冻,文件处于解冻中的状态。完成解冻后,可以读取文件。解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。 以下代码用于解冻归档文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->restoreObject($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 存储类型详情请参见存储类型。 符号链接创建符号链接符号链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。符号链接支持自定义元信息。 以下代码用于创建符号链接: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putSymlink($bucket, $symlink, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取符号链接指向的文件内容获取符号链接要求您对该符号链接有读权限。以下代码用于获取符号链接指向的文件内容: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $Symlinks = $ossClient->getSymlink($bucket, $symlink);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($Symlinks); 开启MD5校验MD5校验用于确保数据传输的完整性。使用MD5校验时,性能会有所损失。上传文件时默认关闭MD5校验。 以下代码用于上传文件时开启MD5校验: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$options = array(OssClient::OSS_CHECK_MD5 => true);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, __FILE__, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); putObject、uploadFile、appendObject、appendFile、multiuploadFile方法支持开启MD5校验。
2019-12-01 23:14:29 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档您可以通过一系列的接口管理存储空间(Bucket)下的文件(Object)。管理文件的完整代码请参见:GitHub。 判断文件是否存在以下代码用于判断指定的文件是否存在: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $exist = $ossClient->doesObjectExist($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($exist); 文件访问权限文件的访问权限(ACL)有以下四种: 访问权限 描述 访问权限值 继承Bucket 文件遵循存储空间的访问权限。 default 私有 文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。 private 公共读 文件的拥有者和授权用户有该文件的读写权限,其他用户只有文件的读权限。请谨慎使用该权限。 public-read 公共读写 所有用户都有该文件的读写权限。请谨慎使用该权限。 public-read-write 文件的访问权限优先级高于存储空间的访问权限。例如存储空间的访问权限是私有,而文件的访问权限是公共读写,则所有用户都有该文件的读写权限。如果某个文件没有设置过访问权限,则遵循存储空间的访问权限。 设置文件访问权限以下代码用于设置指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";// 设置文件的访问权限为公共读,默认为继承Bucket。$acl = "public-read";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObjectAcl($bucket, $object, $acl);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件访问权限以下代码用于获取指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectAcl = $ossClient->getObjectAcl($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($objectAcl); 文件元信息文件元信息(Object Meta)详情请参见开发指南中的文件元信息。 设置文件元信息以下代码用于设置文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$content = file_get_contents(__FILE__);$options = array( OssClient::OSS_HEADERS => array( 'Expires' => '2012-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-self-define-title' => 'user define meta info', ));try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 修改文件元信息以下代码用于修改文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;/// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$fromBucket = "<yourFromBucketName>";$fromObject = "<yourFromObjectName>";$toBucket = "<yourToBucketName>";$toObject = "<yourToObjectName>";$copyOptions = array( OssClient::OSS_HEADERS => array( 'Expires' => '2018-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-location' => 'location', ),);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件元信息以下代码用于获取文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectMeta = $ossClient->getObjectMeta($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");if (isset($objectMeta[strtolower('Content-Disposition')]) && 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]) { print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");} else { print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");} 列举文件列举所有文件以下代码用于列举指定存储空间下的所有文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);while (true) { try { $listObjectInfo = $ossClient->listObjects($bucket, $options); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表。 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); $listPrefix = $listObjectInfo->getPrefixList(); if (!empty($listObject)) { print("objectList:\n"); foreach ($listObject as $objectInfo) { print($objectInfo->getKey() . "\n"); } } if (!empty($listPrefix)) { print("prefixList: \n"); foreach ($listPrefix as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); } } if ($nextMarker === '') { break; }} 列举指定条件的文件以下代码用于列举指定条件的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$prefix = 'dir/';$delimiter = '/';$nextMarker = '';$maxkeys = 10;$options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker,);try { $listObjectInfo = $ossClient->listObjects($bucket, $options);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");$objectList = $listObjectInfo->getObjectList(); // object list$prefixList = $listObjectInfo->getPrefixList(); // directory listif (!empty($objectList)) { print("objectList:\n"); foreach ($objectList as $objectInfo) { print($objectInfo->getKey() . "\n"); }}if (!empty($prefixList)) { print("prefixList: \n"); foreach ($prefixList as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); }} 上述例子中的$options包含的参数如下: 参数 说明 是否必需 delimiter 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 否 prefix 本次查询结果的前缀。 否 max-keys 列举文件的最大个数。默认为100,最大值为1000。 否 marker 标明本次列举文件的起点。 否 删除文件删除单个文件以下代码用于删除单个文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 删除多个文件以下代码用于批量删除文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$objects = array();$objects[] = "<yourObjectName1>";$objects[] = "<yourObjectName2>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObjects($bucket, $objects);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 拷贝文件简单拷贝以下代码用于拷贝小于1GB的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$from_bucket = "<yourFromBucketName>";$from_object = "<yourFromObjectName>";$to_bucket = $bucket;$to_object = $from_object . '.copy';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");` 拷贝大文件对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步: 通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。通过$ossClient->completeMultipartUpload提交分片拷贝任务。 以下代码用于分片拷贝: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$src_bucket = "<yourSourceBucketName>";$src_object = "<yourSourceObjectName>";$dst_bucket = "<yourDestinationBucketName>";$dst_object = "<yourDestinationObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); // 初始化分片。 $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object); $copyId = 1; // 逐个分片拷贝。 $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id); $upload_parts[] = array( 'PartNumber' => $copyId, 'ETag' => $eTag, ); // 完成分片拷贝。 $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 解冻归档文件归档类型(Archive)的文件需要解冻(Restore)之后才能读取。非归档类型的文件,不要调用restoreObject方法。 归档文件的状态变换过程如下: 归档类型的文件初始时处于冷冻状态。提交解冻操作后,服务端执行解冻,文件处于解冻中的状态。完成解冻后,可以读取文件。解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。 以下代码用于解冻归档文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->restoreObject($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 存储类型详情请参见存储类型。 符号链接创建符号链接符号链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。符号链接支持自定义元信息。 以下代码用于创建符号链接: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putSymlink($bucket, $symlink, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取符号链接指向的文件内容获取符号链接要求您对该符号链接有读权限。以下代码用于获取符号链接指向的文件内容: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $Symlinks = $ossClient->getSymlink($bucket, $symlink);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($Symlinks); 开启MD5校验MD5校验用于确保数据传输的完整性。使用MD5校验时,性能会有所损失。上传文件时默认关闭MD5校验。 以下代码用于上传文件时开启MD5校验: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$options = array(OssClient::OSS_CHECK_MD5 => true);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, __FILE__, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); putObject、uploadFile、appendObject、appendFile、multiuploadFile方法支持开启MD5校验。
2019-12-01 23:14:29 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档您可以通过一系列的接口管理存储空间(Bucket)下的文件(Object)。管理文件的完整代码请参见:GitHub。 判断文件是否存在以下代码用于判断指定的文件是否存在: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $exist = $ossClient->doesObjectExist($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($exist); 文件访问权限文件的访问权限(ACL)有以下四种: 访问权限 描述 访问权限值 继承Bucket 文件遵循存储空间的访问权限。 default 私有 文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。 private 公共读 文件的拥有者和授权用户有该文件的读写权限,其他用户只有文件的读权限。请谨慎使用该权限。 public-read 公共读写 所有用户都有该文件的读写权限。请谨慎使用该权限。 public-read-write 文件的访问权限优先级高于存储空间的访问权限。例如存储空间的访问权限是私有,而文件的访问权限是公共读写,则所有用户都有该文件的读写权限。如果某个文件没有设置过访问权限,则遵循存储空间的访问权限。 设置文件访问权限以下代码用于设置指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";// 设置文件的访问权限为公共读,默认为继承Bucket。$acl = "public-read";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObjectAcl($bucket, $object, $acl);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件访问权限以下代码用于获取指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectAcl = $ossClient->getObjectAcl($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($objectAcl); 文件元信息文件元信息(Object Meta)详情请参见开发指南中的文件元信息。 设置文件元信息以下代码用于设置文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$content = file_get_contents(__FILE__);$options = array( OssClient::OSS_HEADERS => array( 'Expires' => '2012-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-self-define-title' => 'user define meta info', ));try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 修改文件元信息以下代码用于修改文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;/// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$fromBucket = "<yourFromBucketName>";$fromObject = "<yourFromObjectName>";$toBucket = "<yourToBucketName>";$toObject = "<yourToObjectName>";$copyOptions = array( OssClient::OSS_HEADERS => array( 'Expires' => '2018-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-location' => 'location', ),);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件元信息以下代码用于获取文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectMeta = $ossClient->getObjectMeta($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");if (isset($objectMeta[strtolower('Content-Disposition')]) && 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]) { print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");} else { print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");} 列举文件列举所有文件以下代码用于列举指定存储空间下的所有文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);while (true) { try { $listObjectInfo = $ossClient->listObjects($bucket, $options); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表。 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); $listPrefix = $listObjectInfo->getPrefixList(); if (!empty($listObject)) { print("objectList:\n"); foreach ($listObject as $objectInfo) { print($objectInfo->getKey() . "\n"); } } if (!empty($listPrefix)) { print("prefixList: \n"); foreach ($listPrefix as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); } } if ($nextMarker === '') { break; }} 列举指定条件的文件以下代码用于列举指定条件的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$prefix = 'dir/';$delimiter = '/';$nextMarker = '';$maxkeys = 10;$options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker,);try { $listObjectInfo = $ossClient->listObjects($bucket, $options);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");$objectList = $listObjectInfo->getObjectList(); // object list$prefixList = $listObjectInfo->getPrefixList(); // directory listif (!empty($objectList)) { print("objectList:\n"); foreach ($objectList as $objectInfo) { print($objectInfo->getKey() . "\n"); }}if (!empty($prefixList)) { print("prefixList: \n"); foreach ($prefixList as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); }} 上述例子中的$options包含的参数如下: 参数 说明 是否必需 delimiter 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 否 prefix 本次查询结果的前缀。 否 max-keys 列举文件的最大个数。默认为100,最大值为1000。 否 marker 标明本次列举文件的起点。 否 删除文件删除单个文件以下代码用于删除单个文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 删除多个文件以下代码用于批量删除文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$objects = array();$objects[] = "<yourObjectName1>";$objects[] = "<yourObjectName2>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObjects($bucket, $objects);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 拷贝文件简单拷贝以下代码用于拷贝小于1GB的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$from_bucket = "<yourFromBucketName>";$from_object = "<yourFromObjectName>";$to_bucket = $bucket;$to_object = $from_object . '.copy';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");` 拷贝大文件对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步: 通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。通过$ossClient->completeMultipartUpload提交分片拷贝任务。 以下代码用于分片拷贝: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$src_bucket = "<yourSourceBucketName>";$src_object = "<yourSourceObjectName>";$dst_bucket = "<yourDestinationBucketName>";$dst_object = "<yourDestinationObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); // 初始化分片。 $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object); $copyId = 1; // 逐个分片拷贝。 $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id); $upload_parts[] = array( 'PartNumber' => $copyId, 'ETag' => $eTag, ); // 完成分片拷贝。 $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 解冻归档文件归档类型(Archive)的文件需要解冻(Restore)之后才能读取。非归档类型的文件,不要调用restoreObject方法。 归档文件的状态变换过程如下: 归档类型的文件初始时处于冷冻状态。提交解冻操作后,服务端执行解冻,文件处于解冻中的状态。完成解冻后,可以读取文件。解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。 以下代码用于解冻归档文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->restoreObject($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 存储类型详情请参见存储类型。 符号链接创建符号链接符号链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。符号链接支持自定义元信息。 以下代码用于创建符号链接: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putSymlink($bucket, $symlink, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取符号链接指向的文件内容获取符号链接要求您对该符号链接有读权限。以下代码用于获取符号链接指向的文件内容: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $Symlinks = $ossClient->getSymlink($bucket, $symlink);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($Symlinks); 开启MD5校验MD5校验用于确保数据传输的完整性。使用MD5校验时,性能会有所损失。上传文件时默认关闭MD5校验。 以下代码用于上传文件时开启MD5校验: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$options = array(OssClient::OSS_CHECK_MD5 => true);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, __FILE__, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); putObject、uploadFile、appendObject、appendFile、multiuploadFile方法支持开启MD5校验。
2019-12-01 23:14:29 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档您可以通过一系列的接口管理存储空间(Bucket)下的文件(Object)。管理文件的完整代码请参见:GitHub。 判断文件是否存在以下代码用于判断指定的文件是否存在: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $exist = $ossClient->doesObjectExist($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($exist); 文件访问权限文件的访问权限(ACL)有以下四种: 访问权限 描述 访问权限值 继承Bucket 文件遵循存储空间的访问权限。 default 私有 文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。 private 公共读 文件的拥有者和授权用户有该文件的读写权限,其他用户只有文件的读权限。请谨慎使用该权限。 public-read 公共读写 所有用户都有该文件的读写权限。请谨慎使用该权限。 public-read-write 文件的访问权限优先级高于存储空间的访问权限。例如存储空间的访问权限是私有,而文件的访问权限是公共读写,则所有用户都有该文件的读写权限。如果某个文件没有设置过访问权限,则遵循存储空间的访问权限。 设置文件访问权限以下代码用于设置指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";// 设置文件的访问权限为公共读,默认为继承Bucket。$acl = "public-read";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObjectAcl($bucket, $object, $acl);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件访问权限以下代码用于获取指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectAcl = $ossClient->getObjectAcl($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($objectAcl); 文件元信息文件元信息(Object Meta)详情请参见开发指南中的文件元信息。 设置文件元信息以下代码用于设置文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$content = file_get_contents(__FILE__);$options = array( OssClient::OSS_HEADERS => array( 'Expires' => '2012-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-self-define-title' => 'user define meta info', ));try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 修改文件元信息以下代码用于修改文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;/// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$fromBucket = "<yourFromBucketName>";$fromObject = "<yourFromObjectName>";$toBucket = "<yourToBucketName>";$toObject = "<yourToObjectName>";$copyOptions = array( OssClient::OSS_HEADERS => array( 'Expires' => '2018-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-location' => 'location', ),);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件元信息以下代码用于获取文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectMeta = $ossClient->getObjectMeta($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");if (isset($objectMeta[strtolower('Content-Disposition')]) && 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]) { print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");} else { print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");} 列举文件列举所有文件以下代码用于列举指定存储空间下的所有文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);while (true) { try { $listObjectInfo = $ossClient->listObjects($bucket, $options); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表。 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); $listPrefix = $listObjectInfo->getPrefixList(); if (!empty($listObject)) { print("objectList:\n"); foreach ($listObject as $objectInfo) { print($objectInfo->getKey() . "\n"); } } if (!empty($listPrefix)) { print("prefixList: \n"); foreach ($listPrefix as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); } } if ($nextMarker === '') { break; }} 列举指定条件的文件以下代码用于列举指定条件的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$prefix = 'dir/';$delimiter = '/';$nextMarker = '';$maxkeys = 10;$options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker,);try { $listObjectInfo = $ossClient->listObjects($bucket, $options);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");$objectList = $listObjectInfo->getObjectList(); // object list$prefixList = $listObjectInfo->getPrefixList(); // directory listif (!empty($objectList)) { print("objectList:\n"); foreach ($objectList as $objectInfo) { print($objectInfo->getKey() . "\n"); }}if (!empty($prefixList)) { print("prefixList: \n"); foreach ($prefixList as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); }} 上述例子中的$options包含的参数如下: 参数 说明 是否必需 delimiter 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 否 prefix 本次查询结果的前缀。 否 max-keys 列举文件的最大个数。默认为100,最大值为1000。 否 marker 标明本次列举文件的起点。 否 删除文件删除单个文件以下代码用于删除单个文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 删除多个文件以下代码用于批量删除文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$objects = array();$objects[] = "<yourObjectName1>";$objects[] = "<yourObjectName2>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObjects($bucket, $objects);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 拷贝文件简单拷贝以下代码用于拷贝小于1GB的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$from_bucket = "<yourFromBucketName>";$from_object = "<yourFromObjectName>";$to_bucket = $bucket;$to_object = $from_object . '.copy';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");` 拷贝大文件对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步: 通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。通过$ossClient->completeMultipartUpload提交分片拷贝任务。 以下代码用于分片拷贝: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$src_bucket = "<yourSourceBucketName>";$src_object = "<yourSourceObjectName>";$dst_bucket = "<yourDestinationBucketName>";$dst_object = "<yourDestinationObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); // 初始化分片。 $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object); $copyId = 1; // 逐个分片拷贝。 $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id); $upload_parts[] = array( 'PartNumber' => $copyId, 'ETag' => $eTag, ); // 完成分片拷贝。 $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 解冻归档文件归档类型(Archive)的文件需要解冻(Restore)之后才能读取。非归档类型的文件,不要调用restoreObject方法。 归档文件的状态变换过程如下: 归档类型的文件初始时处于冷冻状态。提交解冻操作后,服务端执行解冻,文件处于解冻中的状态。完成解冻后,可以读取文件。解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。 以下代码用于解冻归档文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->restoreObject($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 存储类型详情请参见存储类型。 符号链接创建符号链接符号链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。符号链接支持自定义元信息。 以下代码用于创建符号链接: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putSymlink($bucket, $symlink, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取符号链接指向的文件内容获取符号链接要求您对该符号链接有读权限。以下代码用于获取符号链接指向的文件内容: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $Symlinks = $ossClient->getSymlink($bucket, $symlink);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($Symlinks); 开启MD5校验MD5校验用于确保数据传输的完整性。使用MD5校验时,性能会有所损失。上传文件时默认关闭MD5校验。 以下代码用于上传文件时开启MD5校验: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$options = array(OssClient::OSS_CHECK_MD5 => true);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, __FILE__, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); putObject、uploadFile、appendObject、appendFile、multiuploadFile方法支持开启MD5校验。
2019-12-01 23:14:28 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档您可以通过一系列的接口管理存储空间(Bucket)下的文件(Object)。管理文件的完整代码请参见:GitHub。 判断文件是否存在以下代码用于判断指定的文件是否存在: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $exist = $ossClient->doesObjectExist($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($exist); 文件访问权限文件的访问权限(ACL)有以下四种: 访问权限 描述 访问权限值 继承Bucket 文件遵循存储空间的访问权限。 default 私有 文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。 private 公共读 文件的拥有者和授权用户有该文件的读写权限,其他用户只有文件的读权限。请谨慎使用该权限。 public-read 公共读写 所有用户都有该文件的读写权限。请谨慎使用该权限。 public-read-write 文件的访问权限优先级高于存储空间的访问权限。例如存储空间的访问权限是私有,而文件的访问权限是公共读写,则所有用户都有该文件的读写权限。如果某个文件没有设置过访问权限,则遵循存储空间的访问权限。 设置文件访问权限以下代码用于设置指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";// 设置文件的访问权限为公共读,默认为继承Bucket。$acl = "public-read";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObjectAcl($bucket, $object, $acl);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件访问权限以下代码用于获取指定文件的访问权限: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectAcl = $ossClient->getObjectAcl($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($objectAcl); 文件元信息文件元信息(Object Meta)详情请参见开发指南中的文件元信息。 设置文件元信息以下代码用于设置文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$content = file_get_contents(__FILE__);$options = array( OssClient::OSS_HEADERS => array( 'Expires' => '2012-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-self-define-title' => 'user define meta info', ));try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 修改文件元信息以下代码用于修改文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;/// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$fromBucket = "<yourFromBucketName>";$fromObject = "<yourFromObjectName>";$toBucket = "<yourToBucketName>";$toObject = "<yourToObjectName>";$copyOptions = array( OssClient::OSS_HEADERS => array( 'Expires' => '2018-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename="xxxxxx"', 'x-oss-meta-location' => 'location', ),);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取文件元信息以下代码用于获取文件元信息: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectMeta = $ossClient->getObjectMeta($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");if (isset($objectMeta[strtolower('Content-Disposition')]) && 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]) { print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");} else { print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");} 列举文件列举所有文件以下代码用于列举指定存储空间下的所有文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);while (true) { try { $listObjectInfo = $ossClient->listObjects($bucket, $options); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表。 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); $listPrefix = $listObjectInfo->getPrefixList(); if (!empty($listObject)) { print("objectList:\n"); foreach ($listObject as $objectInfo) { print($objectInfo->getKey() . "\n"); } } if (!empty($listPrefix)) { print("prefixList: \n"); foreach ($listPrefix as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); } } if ($nextMarker === '') { break; }} 列举指定条件的文件以下代码用于列举指定条件的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$prefix = 'dir/';$delimiter = '/';$nextMarker = '';$maxkeys = 10;$options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker,);try { $listObjectInfo = $ossClient->listObjects($bucket, $options);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");$objectList = $listObjectInfo->getObjectList(); // object list$prefixList = $listObjectInfo->getPrefixList(); // directory listif (!empty($objectList)) { print("objectList:\n"); foreach ($objectList as $objectInfo) { print($objectInfo->getKey() . "\n"); }}if (!empty($prefixList)) { print("prefixList: \n"); foreach ($prefixList as $prefixInfo) { print($prefixInfo->getPrefix() . "\n"); }} 上述例子中的$options包含的参数如下: 参数 说明 是否必需 delimiter 对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。 否 prefix 本次查询结果的前缀。 否 max-keys 列举文件的最大个数。默认为100,最大值为1000。 否 marker 标明本次列举文件的起点。 否 删除文件删除单个文件以下代码用于删除单个文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 删除多个文件以下代码用于批量删除文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$objects = array();$objects[] = "<yourObjectName1>";$objects[] = "<yourObjectName2>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObjects($bucket, $objects);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 拷贝文件简单拷贝以下代码用于拷贝小于1GB的文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$from_bucket = "<yourFromBucketName>";$from_object = "<yourFromObjectName>";$to_bucket = $bucket;$to_object = $from_object . '.copy';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");` 拷贝大文件对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步: 通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。通过$ossClient->completeMultipartUpload提交分片拷贝任务。 以下代码用于分片拷贝: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$src_bucket = "<yourSourceBucketName>";$src_object = "<yourSourceObjectName>";$dst_bucket = "<yourDestinationBucketName>";$dst_object = "<yourDestinationObjectName>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); // 初始化分片。 $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object); $copyId = 1; // 逐个分片拷贝。 $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id); $upload_parts[] = array( 'PartNumber' => $copyId, 'ETag' => $eTag, ); // 完成分片拷贝。 $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 解冻归档文件归档类型(Archive)的文件需要解冻(Restore)之后才能读取。非归档类型的文件,不要调用restoreObject方法。 归档文件的状态变换过程如下: 归档类型的文件初始时处于冷冻状态。提交解冻操作后,服务端执行解冻,文件处于解冻中的状态。完成解冻后,可以读取文件。解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。 以下代码用于解冻归档文件: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->restoreObject($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 存储类型详情请参见存储类型。 符号链接创建符号链接符号链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。符号链接支持自定义元信息。 以下代码用于创建符号链接: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putSymlink($bucket, $symlink, $object);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); 获取符号链接指向的文件内容获取符号链接要求您对该符号链接有读权限。以下代码用于获取符号链接指向的文件内容: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$symlink = "<yourSymlink>";try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $Symlinks = $ossClient->getSymlink($bucket, $symlink);} catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n");var_dump($Symlinks); 开启MD5校验MD5校验用于确保数据传输的完整性。使用MD5校验时,性能会有所损失。上传文件时默认关闭MD5校验。 以下代码用于上传文件时开启MD5校验: <?phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = "<yourAccessKeyId>";$accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";$bucket= "<yourBucketName>";$object = "<yourObjectName>";$options = array(OssClient::OSS_CHECK_MD5 => true);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, __FILE__, $options);} catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return;}print(__FUNCTION__ . ": OK" . "\n"); putObject、uploadFile、appendObject、appendFile、multiuploadFile方法支持开启MD5校验。
2019-12-01 23:14:29 0 浏览量 回答数 0

回答

HTTP断点续传原理Http头 Range、Content-Range()HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,如(Range:200-300)Content-Range用于响应头请求下载整个文件:GET /test.rar HTTP/1.1 Connection: close Host: 116.1.219.219 Range: bytes=0-801 //一般请求下载整个文件是bytes=0- 或不用这个头一般正常回应HTTP/1.1 200 OK Content-Length: 801 Content-Type: application/octet-stream Content-Range: bytes 0-800/801 //801:文件总大小 FileDownload.class.php [php] view plain copy <?php /** php下载类,支持断点续传 * Date: 2013-06-30 * Author: fdipzone * Ver: 1.0 * * Func: * download: 下载文件 * setSpeed: 设置下载速度 * getRange: 获取header中Range */ class FileDownload{ // class start private $_speed = 512; // 下载速度 /** 下载 * @param String $file 要下载的文件路径 * @param String $name 文件名称,为空则与下载的文件名称一样 * @param boolean $reload 是否开启断点续传 */ public function download($file, $name='', $reload=false){ if(file_exists($file)){ if($name==''){ $name = basename($file); } $fp = fopen($file, 'rb'); $file_size = filesize($file); $ranges = $this->getRange($file_size); header('cache-control:public'); header('content-type:application/octet-stream'); header('content-disposition:attachment; filename='.$name); if($reload && $ranges!=null){ // 使用续传 header('HTTP/1.1 206 Partial Content'); header('Accept-Ranges:bytes'); // 剩余长度 header(sprintf('content-length:%u',$ranges['end']-$ranges['start'])); // range信息 header(sprintf('content-range:bytes %s-%s/%s', $ranges['start'], $ranges['end'], $file_size)); // fp指针跳到断点位置 fseek($fp, sprintf('%u', $ranges['start'])); }else{ header('HTTP/1.1 200 OK'); header('content-length:'.$file_size); } while(!feof($fp)){ echo fread($fp, round($this->_speed*1024,0)); ob_flush(); //sleep(1); // 用于测试,减慢下载速度 } ($fp!=null) && fclose($fp); }else{ return ''; } } /** 设置下载速度 * @param int $speed */ public function setSpeed($speed){ if(is_numeric($speed) && $speed>16 && $speed<4096){ $this->_speed = $speed; } } /** 获取header range信息 * @param int $file_size 文件大小 * @return Array */ private function getRange($file_size){ if(isset($_SERVER['HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE'])){ $range = $_SERVER['HTTP_RANGE']; $range = preg_replace('/[\s|,].*/', '', $range); $range = explode('-', substr($range, 6)); if(count($range)<2){ $range[1] = $file_size; } $range = array_combine(array('start','end'), $range); if(empty($range['start'])){ $range['start'] = 0; } if(empty($range['end'])){ $range['end'] = $file_size; } return $range; } return null; } } // class end ?> demo [php] view plain copy <?php require('FileDownload.class.php'); $file = 'book.zip'; $name = time().'.zip'; $obj = new FileDownload(); $flag = $obj->download($file, $name); //$flag = $obj->download($file, $name, true); // 断点续传 if(!$flag){ echo 'file not exists'; } ?> 断点续传测试方法:使用linux wget命令去测试下载, wget -c -O file http://xxx1.先关闭断点续传$flag = $obj->download($file, $name); [plain] view plain copy fdipzone@ubuntu:~/Downloads$ wget -O test.rar http://demo.fdipzone.com/demo.php --2013-06-30 16:52:44-- http://demo.fdipzone.com/demo.php 正在解析主机 demo.fdipzone.com... 127.0.0.1 正在连接 demo.fdipzone.com|127.0.0.1|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 10445120 (10.0M) [application/octet-stream] 正在保存至: “test.rar” 30% [============================> ] 3,146,580 513K/s 估时 14s ^C fdipzone@ubuntu:~/Downloads$ wget -c -O test.rar http://demo.fdipzone.com/demo.php --2013-06-30 16:52:57-- http://demo.fdipzone.com/demo.php 正在解析主机 demo.fdipzone.com... 127.0.0.1 正在连接 demo.fdipzone.com|127.0.0.1|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 10445120 (10.0M) [application/octet-stream] 正在保存至: “test.rar” 30% [============================> ] 3,146,580 515K/s 估时 14s ^C 可以看到,wget -c不能断点续传 2.开启断点续传 $flag = $obj->download($file, $name, true); [plain] view plain copy fdipzone@ubuntu:~/Downloads$ wget -O test.rar http://demo.fdipzone.com/demo.php --2013-06-30 16:53:19-- http://demo.fdipzone.com/demo.php 正在解析主机 demo.fdipzone.com... 127.0.0.1 正在连接 demo.fdipzone.com|127.0.0.1|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 10445120 (10.0M) [application/octet-stream] 正在保存至: “test.rar” 20% [==================> ] 2,097,720 516K/s 估时 16s ^C fdipzone@ubuntu:~/Downloads$ wget -c -O test.rar http://demo.fdipzone.com/demo.php --2013-06-30 16:53:31-- http://demo.fdipzone.com/demo.php 正在解析主机 demo.fdipzone.com... 127.0.0.1 正在连接 demo.fdipzone.com|127.0.0.1|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 206 Partial Content 长度: 10445121 (10.0M),7822971 (7.5M) 字节剩余 [application/octet-stream] 正在保存至: “test.rar” 100%[++++++++++++++++++++++++=========================================================================>] 10,445,121 543K/s 花时 14s 2013-06-30 16:53:45 (543 KB/s) - 已保存 “test.rar” [10445121/10445121]) 可以看到会从断点的位置(%20)开始下载。
小旋风柴进 2019-12-02 02:02:57 0 浏览量 回答数 0

回答

var promise1 = someAjax(); //someFunction返回jq的jqxhr对象 var promise2 = promise1.then(function (data) { return ajax1(); //返回jq的jqxhr对象 return ajax2(); //返回jq的jqxhr对象 }, function (xhr) { // nothing here }); promise2.then(function (data) { // ajax1执行成功, // 和ajax2执行成功之后, // 我如何针对它俩进行不同的操作? }, function (xhr) { alert("error"); }); 也就是说,现在我们有两个问题。问题一(我原本的问题):我想在执行某个ajax之后,成功的话,执行ajax1,失败的话,执行ajax2,那么如何分别对ajax1和ajax2的后续进行操作?问题二(我追加的问题):我想在执行某个ajax之后,成功的话,执行ajax1和ajax2,那么如何分别对ajax1和ajax2的后续进行操作?在stackoverflow上面,这个回答给了我启发,是的,使用$.when()和$.Deferred()不废话,直接上代码。 解决问题一: // 为每一个ajax请求声明一个变量,并设为Deferred对象 // 这一步是必须的,而且必须在$.when前面 // 因为$.when的参数得是一个Deferred对象 var someAjaxDfd = $.Deferred(); var ajax1Dfd = $.Deferred(); var ajax2Dfd = $.Deferred(); // 这是程序主体 // 首先执行someAjax someAjax(someAjaxDfd); $.when(someAjaxDfd).then(function (data) {//这里的参数为什么是data,因为在下面的ajax函数中,我把data当成resolve()的参数传过来了 // someAjax完成之后,如果成功,执行ajax1 ajax1(ajax1Dfd); }, function (xhr) { //这里的参数为什么是xhr,因为在下面的ajax函数中,我把xhr当成reject()的参数传过来了 // 如果失败,执行ajax2 var data = {/* some data */}; ajax2(data, ajax2Dfd); }); $.when(ajax1Dfd).then(function (data) { // ajax1成功之后执行的命令 }, function (xhr) { // ajax1失败之后执行的命令 }); $.when(ajax2Dfd).then(function (data) { // ajax2成功之后执行的命令 }, function (xhr) { // ajax2失败之后执行的命令 }); // 这里是三个ajax函数声明 function someAjax(dfd) { $.ajax({ type: "GET", url: "/someajaxurl", contentType: "application/json", dataType: "json", success: function (data) { dfd.resolve(data); }, error: function (xhr) { dfd.reject(xhr); } }); } function ajax1(dfd) { $.ajax({ type: "GET", url: "/ajax1url", contentType: "application/json", dataType: "json", success: function (data) { dfd.resolve(data); }, error: function (xhr) { dfd.reject(xhr); } }); } function ajax2(data, dfd) { $.ajax({ type: "POST", url: "/ajax1url", contentType: "application/json", dataType: "json", data: JSON.stringify(data), success: function (data) { dfd.resolve(data); }, error: function (xhr) { dfd.reject(xhr); } }); } 所以我的思路的原理是,首先声明一个Deferred对象,然后把这个对象传入到ajax的函数里。如果success,那么传入的Deferred调用resolve()方法,如果error,那么传入的Deferred调用reject()方法。然后在程序中用$.when()监听这个Deferred对象,成功或失败,执行不同的指令。 所以解决问题二,和问题一大同小异: var someAjaxDfd = $.Deferred(); var ajax1Dfd = $.Deferred(); var ajax2Dfd = $.Deferred(); // 这是程序主体 // 首先执行someAjax someAjax(someAjaxDfd); $.when(someAjaxDfd).then(function (data) { // someAjax完成之后,如果成功,执行ajax1和ajax2 ajax1(ajax1Dfd); var data = {/* some data */}; ajax2(data, ajax2Dfd); }, function (xhr) { // nothing here }); $.when(ajax1Dfd).then(function (data) { // ajax1成功之后执行的命令 }, function (xhr) { // ajax1失败之后执行的命令 }); $.when(ajax2Dfd).then(function (data) { // ajax2成功之后执行的命令 }, function (xhr) { // ajax2失败之后执行的命令 }); 另外,如果ajax请求返回的json格式不对,即使status为200,$.ajax()也是会走到error的eventHandler里面的,这个要注意。
小旋风柴进 2019-12-02 02:26:31 0 浏览量 回答数 0

回答

table=is_null($table)?C('TABLE_NAME'):$table;try{//self::$links=newPdo("mysql:host=127,0,0.1;dbname=c61",'root','welcome');self::$links=newPdo('mysql:host='.C('DB_HOST').';dbname='.C('DB_NAME'),C('DB_USER'),C('DB_PWD'));//设置字符编码self::$links->query('SETNAMESUTF8');//设置错误抛出类型self::$links->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);$this->_opt();}catch(PDOException$e){$e->getMessage();}}//定义opt属性privatefunction_opt(){$this->opt=array('field'=>"",'where'=>'','group'=>'','having'=>'','order'=>'','limit'=>'',);}//定义myquery方法publicfunctionmyquery($sql=null){//执行query方法,返回结果集对象$result=self::$links->query("$sql");//取出结果集赋值给数组$rows=$result->fetchAll(PDO::FETCH_ASSOC);return$rows;}//定义all方法publicfunctionall(){//组合字符串$sql="select".$this->opt['field']."from".$this->table.$this->opt['where'].$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit'];echo$sql;return$this->myquery($sql);}//定义field方法publicfunctionfield($sql=''){//需要判断''的情况//给feild元素赋值$this->opt['field']=$sql;return$this;}publicfunctionwhere($sql=''){$this->opt['where']="where".$sql;return$this;}publicfunctionorder($sql=''){$this->opt['order']="orderby".$sql;return$this;}publicfunctionlimit($sql=''){$this->opt['limit']="limit".$sql;return$this;}//定义find()执行publicfunctionfind(){$data=$this->limit(1)->all();//current()返回数组中当前的元素$data=current($data);return$data;}//别名函数onepublicfunctionone(){return$this->find();}//没有结果集的方法publicfunctionmyexec($sql){//echo$sql;$rows=self::$links->exec($sql);if($rows){echo"成功执行{$rows}条数据";return$rows;}else{halt('执行失败');return;}}publicfunctiondelete(){//必须判断where存不存在if(!empty($this->opt['where'])){$sql="deletefrom".$this->table.$this->opt['where'];return$this->myexec($sql);}else{halt('删除必须有where语句');return;}}//定义自动转义方法privatefunction_safe_str($str){//判断是否用户提交的数据,包括post,get,cookie.//如果值为1时为开启,则系统自动转义,如果不为1时,需要调用stripslashes函数转义.if(!get_magic_quotes_gpc()){$str=addslashes($str);};return$str;}//创建添加方法publicfunctionadd($data=null){//如果没有传递参数,使用$_post的值//否则使用传递的值.if(is_null($data))$data=$_POST;//定义存储字段和值的变量$field='';$values='';foreach($dataas$f=>$v){$field.="".$this->_safe_str($f).",";$values.="'".$this->_safe_str($v)."',";}//去除末尾的,号$field=rtrim($field,',');$values=rtrim($values,',');//insertintomessage(title,cid)values('易建联回到中国',2);//组合$sql语句,使用myexec执行.$sql="insertinto".$this->table.'('.$field.')values('.$values.')';echo$sql;return$this->myexec($sql);}//修改方法publicfunctionupdate($data=null){if(empty($_POST))return;if(is_null($data))$data=$_POST;//echo$sql;//如果没设置where语句if(!empty($this->opt['where'])){//updatearcsettitle='快学网',cid='2'whereaid=14;$values='';foreach($dataas$f=>$v){//组合$sql语句$values.=''.$this->_safe_str($f)."='".$this->_safe_str($v)."',";}//echo$values;$values=rtrim($values,",");echo$values;$sql="update".$this->table."set".$values.$this->opt['where'];return$this->myexec($sql);}else{halt('更新语句必须有where语句');return;}}}}?>
爱吃鱼的程序员 2020-06-09 14:05:07 0 浏览量 回答数 0

问题

网站被黑,自动生成文件

网站被别人上传了一个index.php页面  代码如下 <?phpheader("Content-Type: text/html;charset=gb2312");$Remote_server = &#...
ccow先生 2019-12-01 22:04:29 8502 浏览量 回答数 1

回答

不要用 setTimeout用 $timeout var myApp = angular.module('myApp',[]); myApp.controller('asyncCtrl', function($scope,$http,$timeout){ $scope.name = "hello"; $timeout(function(){ $scope.name = "world"; },200); }); 举例来说,如果用 $http 做 GET 请求获取数据,获取数据后再用 success 回调方法来赋值,代码如下: $http.get({ url: '/api/foo' }) .success(function(response) { $scope.name = response });
蛮大人123 2019-12-02 02:05:49 0 浏览量 回答数 0

问题

CGLib动态代理测试不通过-Unable to load cache item?报错

基本类: public class HelloWorld{ public void sayHello(String name) { System.err.println(name+":Hell...
爱吃鱼的程序员 2020-06-08 19:44:05 0 浏览量 回答数 1

回答

php以json或者xml 形式返回给app。明白这点就很好说了,就是把数据包装成json或者xml,返回给APP 定义抽象APP基类: [php] view plain copy print?在CODE上查看代码片派生到我的代码片 <?php /** * 定义API抽象类 */ abstract class Api { const JSON = 'Json'; const XML = 'Xml'; const ARR = 'Array'; /** * 定义工厂方法 * param string $type 返回数据类型 */ public static function factory($type = self::JSON) { $type = isset($_GET['format']) ? $_GET['format'] : $type; $resultClass = ucwords($type); require_once('./Response/' . $type . '.php'); return new $resultClass(); } abstract function response($code, $message, $data); } 以xml形式返回给APP: [php] view plain copy print?在CODE上查看代码片派生到我的代码片 <?php class Xml extends Api { public function response($code, $message = '', $data = array()) { if(!is_numeric($code)) { return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); header('Content-Type:text/xml'); $xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; $xml .= "<root>"; $xml .= self::xmlToEncode($result); $xml .= "</root>"; echo $xml; } public static function xmlToEncode($result) { $xml = $attr = ''; foreach($result as $key => $value) { //判断键值对,如果是数字键值不允许 if(is_numeric($key)) { $attr = " id='" . $key . "'"; $key = "item"; } $xml .= "<{$key}{$attr}>"; //以递归形式返回,主要是因为数组在xml中显示是array,必须显示出来具体键值对 $xml .= is_array($value) ? self::xmlToEncode($value) : $value; $xml .= "</{$key}>\n"; } return $xml; } } 以json格式返回数据: [php] view plain copy print?在CODE上查看代码片派生到我的代码片 <?php /** * 按xml方式输出通信数据 */ class Json extends Api { public function response($code, $message = '', $data = array()) { if(!(is_numeric($code))) { return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); echo json_encode($result); exit; } } 也可以采用这种方式组装返回数据: [php] view plain copy print?在CODE上查看代码片派生到我的代码片 <?php class Response { const JSON = "json"; /** * 按综合方式输出通信数据 * @param integer $code 状态码 * @param string $message 提示信息 * @param array $data 数据 * @param string $type 数据类型 * return string */ public static function show($code, $message = '', $data = array(), $type = self::JSON) { if(!is_numeric($code)) { return ''; } $type = isset($_GET['format']) ? $_GET['format'] : self::JSON; $result = array( 'code' => $code, 'message' => $message, 'data' => $data, ); if($type == 'json') { self::json($code, $message, $data); exit; } elseif($type == 'array') { //适合调试代码 var_dump($result); } elseif($type == 'xml') { self::xmlEncode($code, $message, $data); exit; } else { // TODO } } /** * 按json方式输出通信数据 * @param integer $code 状态码 * @param string $message 提示信息 * @param array $data 数据 * return string */ public static function json($code, $message = '', $data = array()) { if(!is_numeric($code)) { return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); echo json_encode($result); exit; } /** * 按xml方式输出通信数据 * @param integer $code 状态码 * @param string $message 提示信息 * @param array $data 数据 * return string */ public static function xmlEncode($code, $message, $data = array()) { if(!is_numeric($code)) { return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data, ); header("Content-Type:text/xml"); $xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; $xml .= "<root>\n"; $xml .= self::xmlToEncode($result); $xml .= "</root>"; echo $xml; } public static function xmlToEncode($data) { $xml = $attr = ""; foreach($data as $key => $value) { if(is_numeric($key)) { $attr = " id='{$key}'"; $key = "item"; } $xml .= "<{$key}{$attr}>"; $xml .= is_array($value) ? self::xmlToEncode($value) : $value; $xml .= "</{$key}>\n"; } return $xml; } }
小旋风柴进 2019-12-02 02:01:20 0 浏览量 回答数 0

问题

Gravatar 镜像、解决方法大全

前言 Gravatar 目前新手要去玩耍已经比较麻烦了,而老鸟的头像想在博客中正常的显示也成了一大问题,说道镜像大家首先想到的肯定是多说的,可问题是多说的镜像不支持 HTTPS 啊࿰...
妙正灰 2019-12-01 20:57:43 15578 浏览量 回答数 1

问题

Data tables的Bootstrap样式给分页器增加首页尾页,找到了论坛的解决方法,菜鸟看不懂,求解答

为了解决给datatables的Bootstrap样式添加首页尾页,我在datatables论坛找到了代码,可是不会用,代码如下,求解答,用在那个地方。 /* Default class modification */ $.extend($...
a123456678 2019-12-01 20:22:23 1324 浏览量 回答数 1

问题

一个关于Jquery的attr()属性方法的问题

一个用于点击替换链接CSS样式js中的一段 $("select#colors").change(function(){ var color = $(this).children(':selected').val(); $(...
a123456678 2019-12-01 20:21:38 819 浏览量 回答数 1

问题

完善DEDECMS中的图片本化功能

用DEDECMS应该很多吧。这个修改的程序不只DEDECMS可以用,所有需要图片本地化的程序都可以。 需求分析: 有些网站针对空referer做了防链接,比如主站域名为 www.server...
云代维 2019-12-01 21:25:47 10757 浏览量 回答数 9

回答

 那叫GET回复 @JustSt:--GET和POST的概念你没搞明白?Google一下先哪个是GET?是在地址栏输入的那个吗? $_GET[' username']  $_GET[' password ']    回复 @JustSt:是的是我要在验证帐号密码的那个PHP文件里面把$_POST['username']$_POST['password']改成GET? 你看看你form表单中的method 如果是method="get",在接收页面使用$_GET来接收 如果是method="post",在接收页面使用$_POST来接收 回复 @Mr-黄老邪:发了。。。请检查一下回复 @JustSt:把代码发上来看看可是我想通过另外一种方法..就是在地址栏里面来传入arguments..因为.我在XCODE上面也是做一个登录...他也有一个REQUEST...是以FORM的形式POST出去...但是得到的结果和我在地址栏里面传入的结果是一样的...就是接受页面都是无法识别这两个参数 把圣经再看3遍... publicfunctionlogin($username,$password){$username=clean($username);$password=clean($password);$encrypted_psword=hash("sha512","$password");$db_con=mysqli_connect("localhost","root","","Jobridge");$result=mysqli_query($db_con,"SELECT*FROMusr_listWHEREUsername='$username'ANDPassword='$encrypted_psword'");$count=mysqli_num_rows($result);if($count==1){if(isset($_POST['rememberMe'])){setcookie('username',$username,time()+604800,'/');setcookie('password',$encrypted_psword,time()+604800,'/');}else{setcookie('username',$username,time()+3600,'/');setcookie('password',$encrypted_psword,time()+3600,'/');}$currentDate=date('Y-m-dg:i:s');$result=mysqli_query($db_con,"UPDATEusr_listSETlast_login='".$currentDate."'WHEREusername='$username'");?><scripttype="text/javascript">functionredirect(){window.location='/Jobridge/login_page.php';}setTimeout(redirect,0);</script><?php}elseecho"fail";?><scripttype="text/javascript">functionredirect(){window.location='/Jobridge/index.php';}setTimeout(redirect,2000);</script><?php } 上面是我一个class里面的一个function。。。。。。 下面是我创建对象。。然后调用这个方法的代码 <?phpinclude$_SERVER['DOCUMENT_ROOT'].'/controller/main_function.php';$Jobridge=newJobridge;if(isset($_POST['username'])&&isset($_POST['password'])){$username=$_POST['username'];$password=$_POST['password'];$Jobridge->login($username,$password);}?>这两个代码是在不同的文件里的。。。第二套是在login.php。。就是用来做验证的文件里面。 大伙好热心。。。 侬是新手侬可以加Q群80876374 806374876374 80876374
爱吃鱼的程序员 2020-06-22 11:04:51 0 浏览量 回答数 0

问题

PHP API 上传图片提示 401Unauthorized ,如何解决?

下面是代码 &lt;?php require_once('../upyun.class.php'); $upyun = new UpYun('*', '*', '*'); try { echo "直接上传文件\r\n"; ...
落地花开啦 2019-12-01 19:58:03 2071 浏览量 回答数 2

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务