• 关于

    批量修改meta信息

    的搜索结果

回答

详细解答可以参考官方帮助文档OSS提供网页控制台、工具(OSSUtil\OSSBrowser等)、API、SDK等多种访问和管理Object的模式。同时,OSS也提供几类批量操作,以更方便您进行数据管理。 批量上传文件 批量下载文件 批量删除文件 批量修改Meta 批量恢复“冷冻”状态Object为可读 批量上传操作您可以使用以下几种方法,批量上传文件(包括上传文件夹及子目录文件) OSSimport工具:支持从服务器本地、第三方云存储(S3、Azure、腾讯COS等)、OSS某Bucket等数据源批量上传到OSS,特别适合数据量很大的情况,您可以参考操作说明OSSUtil工具:使用OSSUtil cp命令上传文件到OSS,通过-r(—recursive)选项,将指定路径(比如文件夹)的文件,循环递归地都上传到OSS,你可以参考ossutil操作文档OSSBrowser工具:使用OSSBrowser工具,将文件夹批量上传到OSSOSS网页控制台:您可以使用控制台,将文件夹批量上传到OSS 批量下载操作您可以使用以下几种方法,批量下载文件(包括文件夹及子目录文件) OSSUtil工具:使用OSSUtil cp命令从OSS下载文件,通过-r(—recursive)选项,将指定url下的Object,循环递归地下载下来,你可以参考ossutil操作文档OSSBrowser工具:使用OSSBrowser工具,勾选多个文件夹或文件,批量从OSS下载文件 批量删除操作您可以使用以下几种方法,批量删除文件(包括文件夹及子目录文件) OSSBrowser工具:使用OSSBrowser工具,勾选多个文件夹或文件,批量删除文件或文件夹OSS网页控制台: 您可以使用控制台,勾选文件夹或勾选多个文件,批量删除文件或文件夹您可以使用控制台的碎片管理功能,批量删除碎片 OSS SDK:使用OSS SDK中的批量删除接口(如JAVA SDK中OSSClient.deleteObjects),您可以参考SDK文档备注:文件删除后无法恢复,请谨慎操作。 批量修改Meta信息您可以使用以下几种方法,批量修改Object的Meta信息 OSSUtil工具:使用set-meta命令修改Object的Meta信息、set-acl命令修改Object的acl配置,通过-r(—recursive)选项,将指定url下的Object,循环递归地进行修改。您可以参考ossutil操作文档OSS网页控制台:您可以使用控制台,勾选需要修改Http head信息的文件,批量设置 批量恢复“冷冻”状态Object为可读您可以使用以下方法,批量将归档存储的“冷冻”状态的Object恢复为可读 OSSUtil工具:您可以使用restore命令恢复冷冻状态的object为可读状态。可以使用-r选项批量恢复冷冻状态的objects为可读状态。您可以参考ossutil操作文档
2019-12-01 23:31:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS提供网页控制台、工具(OSSUtil\OSSBrowser等)、API、SDK等多种访问和管理Object的模式。同时,OSS也提供几类批量操作,以更方便您进行数据管理。 批量上传文件 批量下载文件 批量删除文件 批量修改Meta 批量恢复“冷冻”状态Object为可读 批量上传操作您可以使用以下几种方法,批量上传文件(包括上传文件夹及子目录文件) OSSimport工具:支持从服务器本地、第三方云存储(S3、Azure、腾讯COS等)、OSS某Bucket等数据源批量上传到OSS,特别适合数据量很大的情况,您可以参考操作说明OSSUtil工具:使用OSSUtil cp命令上传文件到OSS,通过-r(—recursive)选项,将指定路径(比如文件夹)的文件,循环递归地都上传到OSS,你可以参考ossutil操作文档OSSBrowser工具:使用OSSBrowser工具,将文件夹批量上传到OSSOSS网页控制台:您可以使用控制台,将文件夹批量上传到OSS 批量下载操作您可以使用以下几种方法,批量下载文件(包括文件夹及子目录文件) OSSUtil工具:使用OSSUtil cp命令从OSS下载文件,通过-r(—recursive)选项,将指定url下的Object,循环递归地下载下来,你可以参考ossutil操作文档OSSBrowser工具:使用OSSBrowser工具,勾选多个文件夹或文件,批量从OSS下载文件 批量删除操作您可以使用以下几种方法,批量删除文件(包括文件夹及子目录文件) OSSBrowser工具:使用OSSBrowser工具,勾选多个文件夹或文件,批量删除文件或文件夹OSS网页控制台: 您可以使用控制台,勾选文件夹或勾选多个文件,批量删除文件或文件夹您可以使用控制台的碎片管理功能,批量删除碎片 OSS SDK:使用OSS SDK中的批量删除接口(如JAVA SDK中OSSClient.deleteObjects),您可以参考SDK文档备注:文件删除后无法恢复,请谨慎操作。 批量修改Meta信息您可以使用以下几种方法,批量修改Object的Meta信息 OSSUtil工具:使用set-meta命令修改Object的Meta信息、set-acl命令修改Object的acl配置,通过-r(—recursive)选项,将指定url下的Object,循环递归地进行修改。您可以参考ossutil操作文档OSS网页控制台:您可以使用控制台,勾选需要修改Http head信息的文件,批量设置 批量恢复“冷冻”状态Object为可读您可以使用以下方法,批量将归档存储的“冷冻”状态的Object恢复为可读 OSSUtil工具:您可以使用restore命令恢复冷冻状态的object为可读状态。可以使用-r选项批量恢复冷冻状态的objects为可读状态。您可以参考ossutil操作文档
2019-12-01 23:31:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS提供网页控制台、工具(OSSUtil\OSSBrowser等)、API、SDK等多种访问和管理Object的模式。同时,OSS也提供几类批量操作,以更方便您进行数据管理。 批量上传文件 批量下载文件 批量删除文件 批量修改Meta 批量恢复“冷冻”状态Object为可读 批量上传操作您可以使用以下几种方法,批量上传文件(包括上传文件夹及子目录文件) OSSimport工具:支持从服务器本地、第三方云存储(S3、Azure、腾讯COS等)、OSS某Bucket等数据源批量上传到OSS,特别适合数据量很大的情况,您可以参考操作说明OSSUtil工具:使用OSSUtil cp命令上传文件到OSS,通过-r(—recursive)选项,将指定路径(比如文件夹)的文件,循环递归地都上传到OSS,你可以参考ossutil操作文档OSSBrowser工具:使用OSSBrowser工具,将文件夹批量上传到OSSOSS网页控制台:您可以使用控制台,将文件夹批量上传到OSS 批量下载操作您可以使用以下几种方法,批量下载文件(包括文件夹及子目录文件) OSSUtil工具:使用OSSUtil cp命令从OSS下载文件,通过-r(—recursive)选项,将指定url下的Object,循环递归地下载下来,你可以参考ossutil操作文档OSSBrowser工具:使用OSSBrowser工具,勾选多个文件夹或文件,批量从OSS下载文件 批量删除操作您可以使用以下几种方法,批量删除文件(包括文件夹及子目录文件) OSSBrowser工具:使用OSSBrowser工具,勾选多个文件夹或文件,批量删除文件或文件夹OSS网页控制台: 您可以使用控制台,勾选文件夹或勾选多个文件,批量删除文件或文件夹您可以使用控制台的碎片管理功能,批量删除碎片 OSS SDK:使用OSS SDK中的批量删除接口(如JAVA SDK中OSSClient.deleteObjects),您可以参考SDK文档备注:文件删除后无法恢复,请谨慎操作。 批量修改Meta信息您可以使用以下几种方法,批量修改Object的Meta信息 OSSUtil工具:使用set-meta命令修改Object的Meta信息、set-acl命令修改Object的acl配置,通过-r(—recursive)选项,将指定url下的Object,循环递归地进行修改。您可以参考ossutil操作文档OSS网页控制台:您可以使用控制台,勾选需要修改Http head信息的文件,批量设置 批量恢复“冷冻”状态Object为可读您可以使用以下方法,批量将归档存储的“冷冻”状态的Object恢复为可读 OSSUtil工具:您可以使用restore命令恢复冷冻状态的object为可读状态。可以使用-r选项批量恢复冷冻状态的objects为可读状态。您可以参考ossutil操作文档
2019-12-01 23:31:48 0 浏览量 回答数 0

问题

批量修改meta信息

...
2019-12-01 18:43:18 258 浏览量 回答数 1

问题

以前上传的图片全部设置了 Content-Disposition 怎么批量取消

以前上传的图片全部设置了 Content-Disposition 怎么批量取消, OSS批量修改Object的http头信息 [font='microsoft yahei']如果有...
dt84126 2019-12-01 21:00:48 3921 浏览量 回答数 0

问题

PHP-SDK之如何实现管理文件(二)?

删除多个文件 您可以使用OssClient::deleteObjects批量删除多个文件: <?php/** * 批量删除object * * @param OssClient $ossClient OS...
青衫无名 2019-12-01 21:44:57 1355 浏览量 回答数 0

问题

DDL如何创建和修改表?

在快速开始中,我们已经大概了解了在如何通过iDB Cloud创建和修改表。在这一节中,我们将详细描述如何通过DDL创建和修改表。 由于分析型数据库有一些传统关系型数据库没有的特性,所以分析型数据库的...
nicenelly 2019-12-01 21:25:10 1544 浏览量 回答数 0

问题

如何创建和修改表?

在快速开始中,我们已经大概了解了在如何通过iDB Cloud创建和修改表。在这一节中,我们将详细描述如何通过DDL创建和修改表。 由于分析型数据库有一些传统关系型数据库没有的特性,所以分析型数据库的...
nicenelly 2019-12-01 21:10:35 1244 浏览量 回答数 0

问题

Java-SDK之如何实现管理文件(五)?

删除文件 删除单个文件: 您可以通过OSSClient.deleteObject删除单个文件。 // endpoint以杭州为例,其它region请按实际情况填写String endpoint = ...
青衫无名 2019-12-01 21:40:19 1047 浏览量 回答数 0

问题

Redis 4.0、codis 、云数据库 Redis 版集群对比分析

架构对比 Redis 4.0 cluster Redis 4.0 版本的集群是去中心化的结构,集群元数据信息分布在每个节点上,主备切换依赖于多个节点协商选主。Redis 提供了 redis-trib ...
云栖大讲堂 2019-12-01 21:20:41 1050 浏览量 回答数 0

问题

DRDS 错误代码如何解决?

本文档列出了 DRDS 返回的常见错误码及解决方法。 TDDL-4006 ERR_TABLE_NOT_EXIST TDDL-4007 ERR_CANNOT_FETCH_TABLE_META TDDL-4100 ERR_ATOM_NOT...
猫饭先生 2019-12-01 21:21:21 7993 浏览量 回答数 0

回答

背景 Cromwell 的 Call Caching 功能如何开启和关闭? 在一些场景下,提交工作流时不想使用 Call Caching,需要无条件执行,该如何设置? 工作流重新提交后,有一些 task 预期不需要重新执行,但依然执行了,Call Caching 疑似没有生效,怎么查看原因? 本篇文档将对 Call Caching 的使用做一个详细的介绍,包括功能的开启和关闭、如何通过查看元数据的方式,确认 Call Caching 未生效的原因等。 Call Caching 设置 配置文件中设置全局 Call Caching 开关状态 如果要使用 Cromwell 的 Call Caching 功能,需要在 Server 的配置文件中设置: call-caching { # Allows re-use of existing results for jobs you have already run # (default: false) enabled = true # Whether to invalidate a cache result forever if we cannot reuse them. Disable this if you expect some cache copies # to fail for external reasons which should not invalidate the cache (e.g. auth differences between users): # (default: true) invalidate-bad-cache-results = true } call-caching.enabled 是 Call Caching 功能的开关,可以按照自己的需求开启和关闭。 在 Option 中设置单个 Workflow 是否使用 Call Caching 在 Call Caching 功能全局开启的状态下,提交工作流时,可以通过携带如下两个 option 选项设置本次执行是否使用 Call Caching: { "write_to_cache": true, "read_from_cache": true } write_to_cache: 表示本次 workflow 执行结果是否写入 Cache,实际上就是是否给后面的工作流复用。默认是 true。 read_from_cache: 表示本次 workflow 执行是否从 Cache 中读取之前的结果,也就是是否复用以前的结果,默认是 true,如果设置为 false,表示本次执行不使用 Call Caching,强制执行。 查看元数据 工作流执行时,每一个 task 的每一个 call(对应批量计算的一个作业)都会有 metadata,记录了这个步骤的运行过程,当然也包括 Call Caching 的详细信息,通过下面的命令可以查询一个工作流的 metadata: widdler query -m [WorkflowId] 在元数据信息中找到对应的 task 的详细信息,比如: { "callRoot": "oss://gene-test/cromwell_test/GATK4_VariantDiscovery_pipeline_hg38/53cfd3fc-e9d5-4431-83ec-be6c51ab9365/call-HaplotypeCaller/shard-10", "inputs": { "gatk_path": "/gatk/gatk", "ref_fasta": "oss://genomics-public-data-shanghai/broad-references/hg38/v0/Homo_sapiens_assembly38.fasta", "cluster_config": "OnDemand ecs.sn2ne.xlarge img-ubuntu-vpc", "input_bam_index": "oss://gene-test/cromwell_test/GATK4_VariantDiscovery_pipeline_hg38/cf55a2d1-572c-4490-8edf-07656802a79b/call-GatherBamFiles/NA12878.hg38.ready.bam.bai", "output_filename": "NA12878.hg38.vcf.gz", "contamination": null, "ref_fasta_index": "oss://genomics-public-data-shanghai/broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.fai", "ref_dict": "oss://genomics-public-data-shanghai/broad-references/hg38/v0/Homo_sapiens_assembly38.dict", "interval_list": "/home/data/GATK_human_genome_resource_bundle/hg38_from_GCP/hg38_wgs_scattered_calling_intervals/temp_0047_of_50/scattered.interval_list", "input_bam": "oss://gene-test/cromwell_test/GATK4_VariantDiscovery_pipeline_hg38/cf55a2d1-572c-4490-8edf-07656802a79b/call-GatherBamFiles/NA12878.hg38.ready.bam.bam", "docker_image": "registry.cn-shanghai.aliyuncs.com/wgs_poc/poc:4.0.10.1" }, "returnCode": 0, "callCaching": { "allowResultReuse": true, "hashes": { "output expression": { "File output_vcf_index": "A162250CB6F52CC32CB75F5C5793E8BB", "File output_vcf": "7FD061EEA1D3C63912D7B5FB1F3C5218" }, "runtime attribute": { "userData": "N/A", "docker": "F323AFFA030FBB5B352C60BD7D615255", "failOnStderr": "68934A3E9455FA72420237EB05902327", "imageId": "N/A", "continueOnReturnCode": "CFCD208495D565EF66E7DFF9F98764DA" }, "output count": "C81E728D9D4C2F636F067F89CC14862C", "input count": "D3D9446802A44259755D38E6D163E820", "command template": "9104DF40289AB292A52C2A753FBF58D2", "input": { "File interval_list": "04dc2cb895d13a40657d5e2aa7d31e8c", "String output_filename": "2B77B986117FC94D088273AD4D592964", "File ref_fasta": "9A513FB0533F04ED87AE9CB6281DC19B-400", "File input_bam_index": "D7CA83047E1B6B8269DF095F637621FE-1", "String gatk_path": "EB83BBB666B0660B076106408FFC0A9B", "String docker_image": "0981A914F6271269D58AA49FD18A6C13", "String cluster_config": "B4563EC1789E5EB82B3076D362E6D88F", "File ref_dict": "3884C62EB0E53FA92459ED9BFF133AE6", "File input_bam": "9C0AC9A52F5640AA06A0EBCE6A97DF51-301", "File ref_fasta_index": "F76371B113734A56CDE236BC0372DE0A" }, "backend name": "AE9178757DD2A29CF80C1F5B9F34882E" }, "effectiveCallCachingMode": "ReadAndWriteCache", "hit": false, "result": "Cache Miss" }, "stderr": "oss://gene-test/cromwell_test/GATK4_VariantDiscovery_pipeline_hg38/53cfd3fc-e9d5-4431-83ec-be6c51ab9365/call-HaplotypeCaller/shard-10/stderr", "shardIndex": 10, "stdout": "oss://gene-test/cromwell_test/GATK4_VariantDiscovery_pipeline_hg38/53cfd3fc-e9d5-4431-83ec-be6c51ab9365/call-HaplotypeCaller/shard-10/stdout", "outputs": { "output_vcf": "oss://gene-test/cromwell_test/GATK4_VariantDiscovery_pipeline_hg38/53cfd3fc-e9d5-4431-83ec-be6c51ab9365/call-HaplotypeCaller/shard-10/NA12878.hg38.vcf.gz", "output_vcf_index": "oss://gene-test/cromwell_test/GATK4_VariantDiscovery_pipeline_hg38/53cfd3fc-e9d5-4431-83ec-be6c51ab9365/call-HaplotypeCaller/shard-10/NA12878.hg38.vcf.gz.tbi" }, "commandLine": "set -e\n\n /gatk/gatk --java-options "-Xmx4g -Xmx4g" \\n HaplotypeCaller \\n -R /cromwell_inputs/73a7571e/Homo_sapiens_assembly38.fasta \\n -I /cromwell_inputs/02f1b5ca/NA12878.hg38.ready.bam.bam \\n -L /home/data/GATK_human_genome_resource_bundle/hg38_from_GCP/hg38_wgs_scattered_calling_intervals/temp_0047_of_50/scattered.interval_list \\n -O NA12878.hg38.vcf.gz \\n -contamination 0", "attempt": 1, "jobId": "job-000000005DB051A800006F970001CAC8", "start": "2019-10-25T02:38:03.522Z", "backendStatus": "Finished", "runtimeAttributes": { "cluster": "Right(AutoClusterConfiguration(OnDemand,ecs.sn2ne.xlarge,img-ubuntu-vpc,None,None,None))", "continueOnReturnCode": "0", "failOnStderr": "false", "vpc": "BcsVpcConfiguration(Some(10.20.200.0/24),Some(vpc-uf61zj30k0ebuen0xi7ci))", "mounts": "BcsInputMount(Right(nas://10.20.66.4:/data/ali_yun_test/),Left(/home/data),true)", "docker": "BcsDockerWithoutPath(registry.cn-shanghai.aliyuncs.com/wgs_poc/poc:4.0.10.1)", "autoReleaseJob": "false", "maxRetries": "0" }, "executionStatus": "Done", "end": "2019-10-25T03:22:23.481Z", "executionEvents": [ { "endTime": "2019-10-25T03:22:21.626Z", "description": "RunningJob", "startTime": "2019-10-25T02:38:03.645Z" }, { "endTime": "2019-10-25T03:22:22.481Z", "description": "UpdatingCallCache", "startTime": "2019-10-25T03:22:21.626Z" }, { "endTime": "2019-10-25T02:38:03.645Z", "description": "CallCacheReading", "startTime": "2019-10-25T02:38:03.643Z" }, { "endTime": "2019-10-25T02:38:03.522Z", "description": "Pending", "startTime": "2019-10-25T02:38:03.522Z" }, { "endTime": "2019-10-25T02:38:03.542Z", "description": "WaitingForValueStore", "startTime": "2019-10-25T02:38:03.542Z" }, { "endTime": "2019-10-25T03:22:23.481Z", "description": "UpdatingJobStore", "startTime": "2019-10-25T03:22:22.481Z" }, { "endTime": "2019-10-25T02:38:03.643Z", "description": "PreparingJob", "startTime": "2019-10-25T02:38:03.542Z" }, { "endTime": "2019-10-25T02:38:03.542Z", "description": "RequestingExecutionToken", "startTime": "2019-10-25T02:38:03.522Z" } ], "backend": "BCS" } 在上面的元数据中,有一项 callCaching,主要记录了如下信息: allowResultReuse:是否允许其他工作流复用。 如果当前工作流设置了不允许写入 Cache,则不可以复用 如果当前工作流设置了允许写入 Cache,则只有任务执行成功,才允许复用 hashes:当前任务的输入、输出、运行时等参数的 hash 记录,用于比对两次运行条件是否一样。 effectiveCallCachingMode:Call Caching 的模式,比如是否从 Cache 中读取,或者是否写入 Cache 等。 hit:当前任务在 Cache 是否命中。 result:当前任务在 Cache 中命中的详情,比如哪个工作流的哪个 task 的哪个 shard。 综合上面的解释,我们看到实例中的这个 call, 是 GATK4_VariantDiscovery_pipeline_hg38 这个工作流的 HaplotypeCaller 这个 task 的10号 shard,Call Cache 情况如下: 未在 Cache 中命中,完整的执行了一次 执行成功,可以允许后的流程复用 Call Caching 未生效问题排查 如果遇到不符合预期的 task,可以通过如下步骤排查原因: 查看当前 workflow 重新执行的 task 的 Call Caching 元数据 如果当前 task 的 Call Caching 的模式是不使用Cache(可能是提交作业时设置了不使用 Call Caching 的选项),则不会去利用之前的结果,确实会强制重新执行,是符合预期的 如果当前 task 未命中 Cache,则需要查看之前的 workflow, 进一步确认未命中的原因 查看之前的 workflow 的 task 的 CalCaching 元数据,确认之前的 task 是否执行成功,是否可以复用 如果之前的 task 的 不允许复用,可能是执行失败了,或者虽然执行成功,但 Cache 模式设置的不写入 Cache,即不允许复用 如果之前的 task 允许复用,但未命中,则需要比较两次的 hash 记录,可能是由于 Call Caching 相关的参数变化引起的 背景 Cromwell server 的启动需要以下组件配合: 启动 Mysql 的 docker 容器作为 Crowmell 的持久化数据库,包括配置用户名,密码等 填写 Cromwell 配置文件,包括 BCS 后端配置及数据库等配置 使用 Cromwell 的 jar 包,启动 server 实际上 Cromwell 除了发布 jar 包,也会发布对应的 docker 镜像,我们可以考虑使用 docker-compose来简化以上步骤。docker-compose 是 Docker 官方的开源项目,其定位是定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)。 使用docker-compose 可以将容器化的 Cromwell 和 Mysql 两个 service 拉起,作为一个应用来运行。再配合脚本来简化配置,可以将 Cromwell 的服务做成一键启停。 开通 ECS 作为 Crowmell server 首先使用 Cromwell server 镜像开通一台 ECS,ssh 登入机器后,可以运行目录下的cromwell-server.sh,进行Cromwell Server的管理: ./cromwell-server.sh cromwell-server.sh - init cromwell config and start/stop service Usage: cromwell-server.sh [options...] [init/start/stop/status] Options: --id=STRING Access id --key=STRING Access key --root=STRING Oss root for cromwell, e.g: oss://my-bucket/cromwell/ --instance=STRING default runtime: instance type [ecs.sn1.medium] --image=STRING default runtime: image id [img-ubuntu-vpc] 第一次配置与启动服务 初次使用,需要做一些初始配置,可以使用下面的命令完成一键初始化与启动: ./cromwell-server.sh init --id=LTAI8xxxxx --key=vVGZVE8qUNjxxxxxxxx --root=oss://gtx-wgs-demo/cromwell/ 上面的命令完成了以下配置: --id: 批量计算的 Access Id --key: 批量计算的 Access Key --root: Crowmell 运行时在 OSS 上的工作根目录 --instance: Cromwell 默认运行时参数,实例类型 --image: Cromwell 默认运行时参数,镜像ID执行完以上命令后,会根据 Crowmell 配置文件模板生成配置文件,并通过 docker-compose 启动 Cromwell server,并在后台运行。 服务启动后,就可以通过镜像中的命令行工具 widdler 执行工作流的提交: cd /home/cromwell/cromwell/ widdler run echo.wdl inputs.json -o bcs_workflow_tag:test_echo 停止服务 使用下面的命令可以一键停止服务: ./cromwell-server stop 再次启动服务 在已经完成配置的情况下,使用下面的命令,可以完成服务启动: ./cromwell-server start 重新配置并启动服务 如果需要修改配置,在服务停止的情况下,再次使用 init 命令可以完成新配置重新启动: ./cromwell-server.sh init --id=LTAI8xxxxx --key=vVGZVE8qUNjxxxxxxxx --root=oss://gtx-wgs-demo/cromwell/ 使用option文件设置默认运行时参数 在 Crowmell 的配置文件中,可以设置每个 backend 的默认运行时参数 default-runtime-attibutes,也可以在提交工作流时通过 option 覆盖原有设置。 所以如果您在提交工作流时用到了数据盘、NAS等,都可以在 option 文件中设置: { "default_runtime_attributes": { "vpc": "192.168.0.0/24", "autoReleaseJob": true, "mounts": "nas://1f****04-xkv88.cn-beijing.nas.aliyuncs.com:/ /mnt/ true", "dataDisk": "cloud_ssd 250 /home/mount/" }, "bcs_workflow_tag": "Tagxxx", "read_from_cache": true } 使用 widdler 命令行的 -O (大写的O)参数提交 option 文件: widdler run echo.wdl inputs.json -O options.json 在 Cromwell Server 配置完成后,如何快捷的进行提交、停止工作流、流程失败后如何快速定位问题以及工作流完成后如何如何快速查看运行日志、查看工作流的 Metrics 信息、工作流产生的费用等手段,这些问题就变成了 server 运维工作的基本诉求。 Cromwell 以 server 的方式运行后是支持通过 API 接口获取以上信息的,但是有二次开发的工作量;而 widdler 是针对 Cromwell Server API 接口开发的命令行工具,通过 widdler 命令行工具减少运维成本。 本文主要介绍阿里云对 widdler 工具的扩展,通过 widdler 工具查询指定工作流的作业运行状态、后端引擎的运行时信息、费用查询、问题定位调查以及子任务日志查看等功能。 widdler 安装 widdler 默认在阿里云批量计算提供的 Cromwell server 镜像中安装。可以直接使用,无需做安装操作。 配置 widdler 由于涉及到个人阿里云运行数据的查询,需要在使用之前设置对应账号的 AK 信息、以及后端执行引擎所部署的region信息。 config 命令格式: widdler config -i id -k key -r cn-zhangjiakou 3. 校验 WDL 提交工作流之前对 WDL 做语法校验,排除部分低级问题;减少后续提交工作流后由于低级问题导致的流程失败。 validate 命令格式: widdler validate echo.wdl inputs.json 4. 提交工作流 run 命令格式: widdler run echo.wdl inputs.json -l test 其中:test 为 label,可以根据样本进行打标签,后续可以按 label 做过滤。 终止工作流 命令格式: widdler abort workflowId abort 获取工作流 6.1 获取工作流列表 命令格式: widdler query query 其中:默认获取当前 user 7 天内的工作流信息;可以根据 user label等信息来筛选工作流信息;其他使用方法参考 help 信息。 6.2 获取工作流 Meta 命令格式: widdler query workflowId 7. 获取工作流运行状态 命令格式: widdler describe workflowId describe 其中:”stepName” 表示工作流的某个自步骤的名称;”status” 表示当前步骤的运行状态”成功、失败、运行中”;”progress” 表示当前步骤的进度,如”4/4” 表示当前步骤存在4个子任务全部执行完成; 若是”2/4” 则表示当前步骤存在4个任务,已经完成2个。”elapse”表示当前步骤的所有子任务执行总耗时时间(不包括机器的启动时间); “coretime”表示当前步骤所有子任务消耗的核时时间(不包括机器的启动时间)。 命令格式: widdler describe workflowId -t stepName subdescribe shardIndex 是 Cromwell 将每个 task 的子任务按 shardIndex 做索引,对应的是批量计算的一个作业。通过该命令可以看到指定 task 对应的统计信息。 获取工作流统计信息 命令格式: widdler stat workflowId stat 其中:”cpuCore” 表示当前步骤中使用对应实例的 CPU 核数,”cpuUsage” 表示当前步骤所有任务从开始到当前(若当前任务结束状态则表示从开始到结束)的 CPU 平均利用率;”memSize” 表示当前步骤中使用对应实例的内存大小,”memUsage” 表示当前步骤中所有任务从开始到当前的MEM平均利用率;”sysDisk” 表示当前步骤实例的系统盘大小(默认 40GB),”sysDiskUsage” 表示当前步骤的所有任务在当前时间点的磁盘平均利用率;”dataDisk” 表示实例的数据盘大小(默认没有),”dataDiskUsage” 表示当前步骤的所有任务在当前时间点的磁盘平均利用率。 命令格式: widdler stat workflowId -t stepName substat 查询某个步骤对应的 Metrics 信息;可能某个步骤存在多个 scatter,那么每个 scatter 运行情况如何,则可以通过本命令获取到。 获取工作流费用 命令格式: widdler billing workflowId newbill 获取工作流运行日志 命令格式: widdler log workflowId 通过 log 查询命令,可以查看工作流的实际运行情况,执行过程是否符合预期可以通过该命令做到一键查看。stdout 以及 stderr 日志小于 1MB 的,会直接在屏幕上显示出来;超过 1MB 的需要借助 OSS 工具查看。 log 工作流问题定位 命令格式: widdler explain workflowId 通过该命令可以一键查询工作流失败的原因,展示出现问题的步骤,输出该步骤的对应失败任务的 stdout 以及 stderr 信息,快速排查问题。 explain 更多其他功能请参考 widdler 的帮助信息
1934890530796658 2020-03-28 21:40:48 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: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

回答

12月17日更新 请问下同时消费多个topic的情况下,在richmap里面可以获取到当前消息所属的topic吗? 各位大佬,你们实时都是怎样重跑数据的? 有木有大神知道Flink能否消费多个kafka集群的数据? 这个问题有人遇到吗? 你们实时读取广业务库到kafka是通过什么读的?kafka connector 的原理是定时去轮询,这样如果表多了,会不会影响业务库的性能?甚至把业务库搞挂? 有没有flink 1.9 连接 hive的例子啊?官网文档试了,没成功 请问各位是怎么解决实时流数据倾斜的? 请问一下,对于有状态的任务,如果任务做代码升级的时候,可否修改BoundedOutOfOrdernessTimestampExtractor的maxOutOfOrderness呢?是否会有影响数据逻辑的地方呢? 老哥们有做过统计从0点开始截止到现在时刻的累计用户数吗? 比如五分钟输出一次,就是7点输出0点到7点的累计用户,7:05输出0点到7:05的累计用户。 但是我这里有多个维度,现在用redis来做的。 想知道有没有更好的姿势? 实时数仓用什么存储介质来存储维表,维表有大有小,大的大概5千万左右。 各位大神有什么建议和经验分享吗? 请教个问题,就是flink的窗口触发必须是有数据才会触发吗?我现在有个这样的需求,就是存在窗口内没有流数据进入,但是窗口结束是要触发去外部系统获取上一个窗口的结果值作为本次窗口的结果值!现在没有流数据进入窗口结束时如何触发? kafkaSource.setStartFromTimestamp(timestamp); 发现kafkasource从指定时间开始消费,有些topic有效,有效topic无效,大佬们有遇到过吗? 各位大佬,flink两个table join的时候,为什么打印不出来数据,已经赋了关联条件了,但是也不报错 各位大佬 请教一下 一个faile的任务 会在这里面存储展示多久啊? 各位大佬,我的程序每五分钟一个窗口做了基础指标的统计,同时还想统计全天的Uv,这个是用State就能实现吗? 大佬们,flink的redis sink是不是只适用redis2.8.5版本? 有CEP 源码中文注释的发出来学习一下吗? 有没有拿flink和tensorflow集成的? 那位大神,给一个java版的flink1.7 读取kafka数据,做实时监控和统计的功能的代码案例。 请问下风控大佬,flink为风控引擎做数据支撑的时候,怎么应对风控规则的不断变化,比如说登录场景需要实时计算近十分钟内登录次数超过20次用户,这个规则可能会变成计算近五分钟内登录次数超过20次的。 想了解一下大家线上Flink作业一般开始的时候都分配多少内存?广播没办法改CEP flink支持多流(大于2流)join吗? 谁能帮忙提供一下flink的多并行度的情况下,怎么保证数据有序 例如map并行度为2 那就可能出现数据乱序的情况啊 请教下现在从哪里可以可以看单任务的运行状况和内存占用情况,flink页面上能看单个任务的内存、cpu 大佬们 flink1.9 停止任务手动保存savepoint的命令是啥? flink 一个流计算多个任务和 还是一个流一个任务好? flink 1.9 on yarn, 自定义个connector里面用了jni, failover以后 就起不来了, 报错重复load so的问题。 我想问一下 这个,怎么解决。 难道flink 里面不能用jni吗。 ide里面调试没有问题,部署到集群就会报错了,可能什么问题? 请教一下对于长时间耗内存很大的任务,大家都是开checkpoint机制,采用rocksdb做状态后端吗? 请问下大佬,flink jdbc读取mysql,tinyin字段类型自动转化为Boolean有没有好的解决方法 Flink 1.9版本的Blink查询优化器,Hive集成,Python API这几个功能好像都是预览版,请问群里有大佬生产环境中使用这些功能了吗? 想做一个监控或数据分析的功能,如果我flink 的datastreaming实现消费Kafka的数据,但是我监控的规则数据会增加或修改,但是不想停这个正在运行的flink程序,要如何传递这个动态变化的规则数据,大神给个思路,是用ConnectedStream这个吗?还是用Broadcast ?还有一个,比如我的规则数据是存放在Mysql表中,用什么事件隔30秒去触发读取mysql规则表呢?谢谢! 想做一个监控或数据分析的功能,如果我flink 的datastreaming实现消费Kafka的数据,但是我监控的规则数据会增加或修改,但是不想停这个正在运行的flink程序,要如何传递这个动态变化的规则数据,大神给个思路,是用ConnectedStream这个吗?还是用Broadcast ?还有一个,比如我的规则数据是存放在Mysql表中,用什么事件隔30秒去触发读取mysql规则表呢?谢谢! 各位大佬,在一个 Job 计算过程中,查询 MySQL 来补全额外数据,是一个好的实践嘛?还是说流处理过程中应该尽量避免查询额外的数据? Flink web UI是jquery写的吗? 12月9日更新 成功做完一次checkpoint后,会覆盖上一次的checkpoint吗? 数据量较大时,flink实时写入hbase能够异步写入吗? flink的异步io,是不是只是适合异步读取,并不适合异步写入呀? 请问一下,flink将结果sink到redis里面会不会对存储的IO造成很大的压力,如何批量的输出结果呢? 大佬们,flink 1.9.0版本里DataStream api,若从kafka里加载完数据以后,从这一个流中获取数据进行两条业务线的操作,是可以的吗? flink 中的rocksdb状态怎么样能可视化的查看有大佬知道吗? 感觉flink 并不怎么适合做hive 中的计算引擎来提升hive 表的查询速度 大佬们,task端rocksdb状态 保存路径默认是在哪里的啊?我想挂载个新磁盘 把状态存到那里去 flink 的state 在窗口滑动到下一个窗口时候 上一个窗口销毁时候 state会自己清除吗? 求助各位大佬,一个sql里面包含有几个大的hop滑动窗口,如15个小时和24个小时,滑动步长为5分钟,这样就会产生很多overlap 数据,导致状态会很快就达到几百g,然后作业内存也很快达到瓶颈就oom了,然后作业就不断重启,很不稳定,请问这个业务场景有什么有效的解决方案么? 使用jdbcsink的时候,如果连接长时间不使用 就会被关掉,有人遇到过吗?使用的是ddl的方式 如何向云邪大佬咨询FLink相关技术问题? 请问各位公司有专门开发自己的实时计算平台的吗? 请问各位公司有专门开发自己的实时计算平台的吗? 有哪位大佬有cdh集成安装flink的文档或者手册? 有哪位大佬有cdh集成安装flink的文档或者手册? 想问下老哥们都是怎么统计一段时间的UV的? 是直接用window然后count嘛? Flink是不是也是这样的? 请问现在如有个实时程序,根据一个mysql的维表来清洗,但是我这个mysql表里面就只有几条信息且可能会变。 我想同一个定时器去读mysql,然后存在对象中,流清洗的时候读取这个数据,这个想法可行吗?我目前在主类里面定义一个对象,然后往里面更新,发现下面的map方法之类的读不到我更新进去的值 有大佬做过flink—sql的血缘分析吗? 12月3日更新 请教一下,为什么我flume已经登录成功了keytab认证的kafka集群,但是就是消费不到数据呢? flink 写入mysql 很长一段时间没有写入,报错怎么解决呢? flink timestamp转换为date类型,有什么函数吗 Run a single Flink job on YARN 我采用这种模式提交任务,出现无法找到 开启 HA 的ResourceManager Failed to connect to server: xxxxx:8032: retries get failed due to exceeded maximum allowed retries number: 0 有大佬遇到过吗 ? 各位大佬,请问有Flink写S3的方案吗? flink 连接hbase 只支持1.4.3版本? onnector: type: hbase version: "1.4.3" 请问 flink1.9能跑在hadoop3集群上吗? 滑动窗口 排序 报错这个是什么原因呢? 这个pravega和kafka有啥区别? flink 开发里数据源配置了RDS,但是在RDS里没有看到创建的表,是为什么呢? Tumbling Window里的数据,是等窗口期内的数据到齐之后一次性处理,还是到了一条就处理一条啊 双流join后再做time window grouping. 但是双流join会丢失时间属性,请问大家如何解决 stream processing with apache flink,这本书的中译版 现在可以买吗? flink on yarn时,jm和tm占用的内存最小是600M,这个可以修改吗? 各位大佬,使用默认的窗口Trigger,在什么情况下会触发两次啊?窗口关闭后,然后还来了这个窗口期内的数据,并且开了allowedLateness么? flink web里可以像storm那样 看每条数据在该算子中的平均耗时吗? 各位大佬,flink任务的并发数调大到160+以后,每隔几十分钟就会出现一次TM节点连接丢失的异常,导致任务重启。并发在100时运行比较稳定,哪位大佬可以提供下排查的思路? 感觉stateful function 是下一个要发力的点,这个现在有应用案例吗? 我有2个子网(a子网,b子网)用vpn联通,vpn几周可能会断一次。a子网有一个kafka集群,b子网运行我自己的flink集群和应用,b子网的flink应用连接到a子网的kafka集群接收消息来处理入库到数仓去。我的问题是,如果vpn断开,flink consumer会异常整个作业退出吗?如果作业退出,我重连vpn后,能从auto checkpoint再把flink应用恢复到出错时flink kafka consumer应该读取的partition/offset位置吗?flink的checkpoint除了保存自己开发的算子里的state,kafkaconsumer里的partition/offset也会保存和恢复吗? flink的反压为什么不加入metrics呢 hdfs是不是和flink共用一个集群? flink消费kafka,可以从指定时间消费的吗?目前提供的接口只是根据offset消费?有人知道怎么处理? flink 的Keyby是不是只是repartition而已?没有将key相同的数据放到一个组合里面 电商大屏 大家推荐用什么来做吗? 我比较倾向用数据库,因为有些数据需要join其他表,flink充当了什么角色,对这个有点迷,比如统计当天订单量,卖了多少钱,各个省的销量,销售金额,各个品类的销售量销售金额 开源1.9的sql中怎么把watermark给用起来,有大神知道吗? 有没有人能有一些flink的教程 代码之类的分享啊 采用了checkpoint,程序停止了之后,什么都不改,直接重启,还是能接着继续运行吗?如果可以的话,savepoint的意义又是什么呢? 有人做过flink 的tpc-ds测试吗,能不能分享一下操作的流程方法 checkpoint是有时间间隔的,也就可以理解为checkpoint是以批量操作的,那如果还没进行ckecnpoint就挂了,下次从最新的一次checkpoint重启,不是重复消费了? kafka是可以批量读取数据,但是flink是一条一条处理的,应该也可以一条一条提交吧。 各位大佬,flink sql目前是不是不支持tumbling window join,有人了解吗? 你们的HDFS是装在taskmanager上还是完全分开的,请问大佬们有遇到这种情况吗? 大佬们flink检查点存hdfs的话怎么自动清理文件啊 一个128M很快磁盘就满了 有谁遇到过这个问题? 请教一下各位,这段代码里面,我想加一个trigger,实现每次有数据进window时候,就输出,而不是等到window结束再输出,应该怎么加? 麻烦问下 flink on yarn 执行 客户端启动时 报上面错,是什么原因造成的 求大佬指点 ERROR org.apache.flink.client.program.rest.RestClusterClient - Error while shutting down cluster java.util.concurrent.ExecutionException: org.apache.flink.runtime.concurrent.FutureUtils$RetryException: Could not complete the operation. Number of retries has been exhausted. 大家怎么能动态的改变 flink WindowFunction 窗口数据时间 flink on yarn之后。yarn的日志目录被写满,大家如配置的? Flink1.9 启动 yarn-session报这个错误 怎么破? yarn 模式下,checkpoint 是存在 JobManager的,提交任务也是提交给 JobManager 的吧? heckpoint机制,会不会把window里面的数据全部放checkpoint里面? Flink On Yarn的模式下,如果通过REST API 停止Job,并触发savepiont呢 jenkins自动化部署flink的job,一般用什么方案?shell脚本还是api的方式? 各位大佬,开启增量checkpoint 情况下,这个state size 是总的checkpoint 大小,还是增量上传的大小? 想用状态表作为子表 外面嵌套窗口 如何实现呢 因为状态表group by之后 ctime会失去时间属性,有哪位大佬知道的? 你们有试过在同样的3台机器上部署两套kafka吗? 大家有没有比较好的sql解析 组件(支持嵌套sql)? richmapfuntion的open/close方法,和处理数据的map方法,是在同一个线程,还是不同线程调用的? flink on yarn 提交 参数 -p 20 -yn 5 -ys 3 ,我不是只启动了5个container么? Flink的乱序问题怎么解决? 我对数据流先进行了keyBy,print的时候是有数据的,一旦进行了timeWindow滑动窗口就没有数据了,请问是什么情况呢? 搭建flinksql平台的时候,怎么处理udf的呀? 怎么查看sentry元数据里哪些角色有哪些权限? 用java api写的kafka consumer能消费到的消息,但是Flink消费不到,这是为啥? 我state大小如果为2G左右 每次checkpoint会不会有压力? link-table中的udaf能用deltaTrigger么? flink1.7.2,场景是一分钟为窗口计算每分钟传感器的最高温度,同时计算当前分钟与上一分钟最高温 001 Flink集群支持kerberos认证吗?也就是说flink客户端需要向Flink集群进行kerberos认证,认证通过之后客户端才能提交作业到Flink集群运行002 Flink支持多租户吗? 如果要对客户端提交作业到flink进行访问控制,你们有类似的这种使用场景吗? flink可以同时读取多个topic的数据吗? Flink能够做实时ETL(oracle端到oracle端或者多端)么? Flink是否适合普通的关系型数据库呢? Flink是否适合普通的关系型数据库呢? 流窗口关联mysql中的维度表大佬们都是怎么做的啊? 怎么保证整个链路的exactly one episode精准一次,从source 到flink到sink? 在SQL的TUMBLE窗口的统计中,如果没数据进来的,如何让他也定期执行,比如进行count计算,让他输出0? new FlinkKafkaConsumer010[String]("PREWARNING",new JSONKeyValueDeserializationSchema(true), kafkaProps).setStartFromGroupOffsets() ) 我这样new 它说要我传个KeyedDeserializationSchema接口进去 flink里面broadcast state想定时reload怎么做?我用kafka里的stream flink独立模式高可用搭建必需要hadoop吗? 有人用增量cleanupIncrementally的方式来清理状态的嘛,感觉性能很差。 flink sink to hbase继承 RichOutputFormat运行就报错 kafka 只有低级 api 才拿得到 offset 吗? 有个问题咨询下大家,我的flinksql中有一些参数是要从mysql中获取的,比如我flink的sql是select * from aa where cc=?,这个问号的参数需要从mysql中获取,我用普通的jdbc进行连接可以获的,但是有一个问题,就是我mysql的数据改了之后必须重启flink程序才能解决这个问题,但这肯定不符合要求,请问大家有什么好的办法吗? flink里怎样实现多表关联制作宽表 flink写es,因为半夜es集群做路由,导致写入容易失败,会引起source的反压,然后导致checkpoint超时任务卡死,请问有没有办法在下游es处理慢的时候暂停上游的导入来缓解反压? flink 写parquet 文件,使用StreamingFileSink streamingFileSink = StreamingFileSink.forBulkFormat( new Path(path), ParquetAvroWriters.forReflectRecord(BuyerviewcarListLog.class)). withBucketAssigner(bucketAssigner).build(); 报错 java.lang.UnsupportedOperationException: Recoverable writers on Hadoop are only supported for HDFS and for Hadoop version 2.7 or newer 1.7.2 NoWindowInnerJoin这个实现,我看实现了CleanupState可更新过期时间删除当前key状态的接口,是不是这个1.7.2版本即使有个流的key一直没有被匹配到他的状态也会被清理掉,就不会存在内存泄漏的问题了? flink1.7.2 想在Table的UDAF中使用State,但是发现UDAF的open函数的FunctionContext中对于RuntimeContext是一个private,无法使用,大佬,如何在Table的UDAF中使用State啊? Flink有什么性能测试工具吗? 项目里用到了了KafkaTableSourceSinkFactory和JDBCTableSourceSinkFactory。maven打包后,META-INF里只会保留第一个 标签的org.apache.flink.table.factories.TableFactory内容。然后执行时就会有找不到合适factory的报错,请问有什么解决办法吗? 为什么这个这段逻辑 debug的时候 是直接跳过的 各位大佬,以天为单位的窗口有没有遇到过在八点钟的时候会生成一条昨天的记录? 想问一下,我要做一个规则引擎,需要动态改变规则,如何在flink里面执行? flink-1.9.1/bin/yarn-session.sh: line 32: construc 我要用sql做一个规则引擎,需要动态改变规则,如何在flink里面执行? 我要用sql做一个规则引擎,需要动态改变规则,如何在flink里面执行? 一般公司的flink job有没有进程进行守护?有专门的工具或者是自己写脚本?这种情况针对flink kafka能不能通过java获取topic的消息所占空间大小? Flink container was removed这个咋解决的。我有时候没有数据的时候也出现这 大家有没有这种场景,数据从binlog消费,这个信息是订单信息,同一个订单id,会有不同状态的变更 问大家个Hive问题,新建的hive外部分区表, 怎么把HDFS数据一次性全部导入hive里 ? flink里面的broadcast state值,会出现broad流的数据还没put进mapstat Flink SQL DDL 创建表时,如何定义字段的类型为proctime? 请问下窗口计算能对历史数据进行处理吗?比如kafka里的写数据没停,窗口计算的应用停掉一段时间再开起 请问下,想统计未退费的订单数量,如果一个订单退费了(发过来一个update流),flink能做到对结果进行-1吗,这样的需求sql支持吗? 使用Flink sql时,对table使用了group by操作。然后将结果转换为流时是不是只能使用的toRetractStream方法不能使用toAppendStream方法。 百亿数据实时去重,有哪位同学实践过吗? 你们的去重容许有误差?因为bloom filter其实只能给出【肯定不存在】和【可能存在】两种结果。对于可能存在这种结果,你们会认为是同一条记录? 我就运行了一个自带的示例,一运行就报错然后web页面就崩了 flink定时加载外部数据有人做过吗? NoSuchMethodError: org.apache.flink.api.java.Utils.resolveFactory(Ljava/lang/ThreadLocal;Ljava/lang/Object;)Ljava/util/Optional 各位知道这个是那个包吗? flink 可以把大量数据写入mysql吗?比如10g flink sql 解析复杂的json可以吗? 在页面上写规则,用flink执行,怎么传递给flink? 使用cep时,如何动态添加规则? 如何基于flink 实现两个很大的数据集的交集 并集 差集? flink的应用场景是?除了实时 各位好,请教一下,滑动窗口,每次滑动都全量输出结果,外部存储系统压力大,是否有办法,只输出变化的key? RichSinkFunction close只有任务结束时候才会去调用,但是数据库连接一直拿着,最后成了数据库连接超时了,大佬们有什么好的建议去处理吗?? 为啥我的自定义函数注册,然后sql中使用不了? 请问一下各位老师,flink flapmap 中的collector.collect经常出现Buffer pool is destroyed可能是什么原因呢? 用asyncIO比直接在map里实现读hbase还慢,在和hbase交互这块儿,每个算子都加了时间统计 请教一下,在yarn上运行,会找不到 org.apache.flink.streaming.util 请问下大佬,flink1.7.2对于sql的支持是不是不怎么好啊 ,跑的数据一大就会报错。 各位大佬,都用什么来监控flink集群? flink 有那种把多条消息聚合成一条的操作吗,比如说每五十条聚合成一条 如何可以让checkpoint 跳过对齐呢? 请问 阿里云实时计算(Blink)支持这4个源数据表吗?DataHub Kafka MQ MaxCompute? 为啥checkpoint时间会越来越长,请问哪位大佬知道是因为啥呢? 请问Flink的最大并行度跟kafka partition数量有关系吗? source的并行度应该最好是跟partition数量一致吧,那剩下的算子并行度呢? Flink有 MLIB库吗,为什么1.9中没有了啊? 请教一下,有没有flink ui的文章呢?在这块内存配置,我给 TM 配置的内存只有 4096 M,但是这里为什么对不上呢?请问哪里可以看 TM 内存使用了多少呢? 请教个问题,fink RichSinkFunction的invoke方法是什么时候被调用的? 请教一下,flink的window的触发条件 watermark 小于 window 的 end_time。这个 watermark 为什么是针对所有数据的呢?没有设计为一个 key 一个 watermark 呢? 就比如说有 key1、key2、key3,有3个 watermark,有 3个 window interval不支持left join那怎么可以实现把窗口内左表的数据也写到下游呢? 各位 1、sink如何只得到最终的结果而不是也输出过程结果 ;2、不同的运算如何不借助外部系统的存储作为另外一个运算的source 请教各位一个问题,flink中设置什么配置可以取消Generic这个泛型,如图报错: 有大佬在吗,线上遇到个问题,但是明明内存还有200多G,然后呢任务cancel不了,台也取消不了程序 flink遇到The assigned slot container_1540803405745_0094_01_000008_1 was removed. 有木有大佬遇到过。在flink on yarn上跑 这个报错是什么意思呢?我使用滑动窗口的时候出现报错 flink 双流union状态过期不清理有遇到的吗? 大家有没有这种场景,数据从binlog消费,这个信息是订单信息,同一个订单id,会有不同状态的变更,如果订单表与商品明细join查询,就会出现n条重复数据,这样数据就不准了,flink 这块有没有比较好的实战经验的。 大佬们、有没有人遇到过使用一分钟的TumblingEventTimeWindows,但是没有按时触发窗口、而是一直等到下一条消息进来之后才会把这个窗口的数据发送出去的? flink 有办法 读取 pytorch的 模型文件吗? 大佬们、有没有人遇到过使用一分钟的TumblingEventTimeWindows,但是没有按时触发窗口、而是一直等到下一条消息进来之后才会把这个窗口的数据发送出去的? flink timestamp转换为date类型,有什么函数吗 flink 写入mysql 很长一段时间没有写入,报错怎么解决呢? flink 有办法 读取 pytorch的 模型文件吗? 有没有大佬知道实时报表怎么做?就是统计的结果要实时更新,热数据。 刚接触flink 1.9 求问flink run脚本中怎么没有相关提交到yarn的命令了 请教一下,flink里怎么实现batch sink的操作而不导致数据丢失
问问小秘 2019-12-02 03:19:17 0 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询