云服务器内容精选
-
功能说明 断点续传上传是对分段上传的封装和加强,解决上传大文件时由于网络不稳定或程序崩溃导致上传失败的问题。其原理是将待上传的文件分成若干个分段分别上传,并实时地将每段上传结果统一记录在checkpoint文件中,仅当所有分段都上传成功时返回上传成功的结果,否则返回错误信息提醒用户再次调用接口进行重新上传(重新上传时因为有checkpoint文件记录当前的上传进度,避免重新上传所有分段,从而节省资源提高效率)。
-
代码示例 本示例展示了如何通过使用断点续传方式将本地文件localfile上传到examplebucket桶下的objectKey对象中。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.CompleteMultipartUploadResult; import com.obs.services.model.UploadFileRequest; public class UploadFile001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("AC CES S_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { UploadFileRequest request = new UploadFileRequest("examplebucket", "objectKey"); // 设置待上传的本地文件,localfile为待上传的本地文件路径,需要指定到具体带文件后缀的文件名 request.setUploadFile("localfile"); // 设置分段上传时的最大并发数 request.setTaskNum(5); // 设置分段大小为10MB request.setPartSize(10 * 1024 * 1024); // 开启断点续传模式 request.setEnableCheckpoint(true); // 进行断点续传上传 CompleteMultipartUploadResult result = obsClient.uploadFile(request); System.out.println("UploadFile successfully"); } catch (ObsException e) { // 发生异常时可再次调用断点续传上传接口进行重新上传 System.out.println("UploadFile failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("UploadFile failed"); // 其他异常信息打印 e.printStackTrace(); } } }
-
接口约束 您必须是桶拥有者或拥有上传对象的权限,才能上传对象。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 断点续传上传接口传入的文件大小至少要100K以上。 使用SDK的断点续传接口时,必须开启断点续传选项后才能在进程再次进入时读取上一次上传的进度。
-
代码示例 本示例用于对examplebucket桶中的objectname对象做多段上传初始化,并获取uploadId。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.InitiateMultipartUploadRequest; import com.obs.services.model.InitiateMultipartUploadResult; import com.obs.services.model.ObjectMetadata; public class InitiateMultipartUpload001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("examplebucket", "objectname"); ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata("property", "property-value"); metadata.setContentType("text/plain"); request.setMetadata(metadata); InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request); String uploadId = result.getUploadId(); System.out.println("initiateMultipartUpload successfully"); System.out.println("uploadId:" + uploadId); } catch (ObsException e) { System.out.println("initiateMultipartUpload failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("initiateMultipartUpload failed"); // 其他异常信息打印 e.printStackTrace(); } } }
-
接口约束 您必须是桶拥有者或拥有初始化分段上传任务的权限,才能初始化分段上传任务。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 初始化上传段任务并上传一个或多个段之后,您必须合并段或取消多段上传任务,否则碎片会占用您的存储空间并产生一定的存储费用。
-
在项目内上传数据 登录KooMap管理控制台。 在左侧导航栏的“AR地图”下选择“项目管理”。 在“项目管理”页面,单击项目名称(蓝色字体),进入“项目详情”页面。 单击“上传数据”,根据表1填写待上传数据的相关信息。 表1 上传数据配置参数 配置项 配置说明 数据名称 必填项。 输入数据名称。 名称不可重复。 数据类型 必选项。 目前仅支持“Insta360”。 上传数据 单击“上传文件夹”上传本地的全景视频。 如上传数据错误,可删除重新上传。 数据描述 选填项。 输入待上传数据的相关描述。 单击“确定”,开始上传数据。 您还可以对数据上传任务做如下操作: 查看全部:单击此按钮查看当前任务下全部文件上传进度。 查看激活的:单击此按钮查看当前任务下正在上传的文件上传进度。 继续上传:状态为“失败”时(断网、异常关机、刷新或重启浏览器等情况导致),单击此按钮重新选择数据上传。 移除:单击此按钮移除当前上传任务/文件。 取消:单击此按钮取消文件上传。 数据上传完成后,自动进入预处理阶段。 预处理完成后,“数据状态”为“预处理成功”。
-
响应参数 状态码: 200 表7 响应Body参数 参数 参数类型 描述 asset_id String 媒体ID video_upload_url String 视频上传URL cover_upload_url String 封面上传地址 subtitle_upload_urls Array of strings 字幕文件上传url数组 target File_addr object 媒资存储参数信息。查询接口,仅媒资为托管时有返回值。 表8 File_addr 参数 参数类型 描述 bucket String OBS的bucket名称。 location String 桶所在的区 域名 , 如“华北-北京四”的区域名为“cn-north-4”,创建的桶所在区域必须和点播服务所在区域保持一致。 object String 文件的存储路径。 状态码: 403 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误描述。
-
响应示例 状态码: 200 处理成功返回。 { "asset_id" : "f488337c31c8e4622f1590735b134c65", "video_upload_url" : "https://obs.cn-north-4.myhuaweicloud.com:443/obs-vod-1/%7Bproject_id%7D/f488337c31c8e4622f1590735b134c65/Avatar_480P.mp4?AWSAccessKeyId=CBN2J**********0R CS N&Expires=1518147618&Signature=kZYh0hEos2V**********AHGyXA%3D", "cover_upload_url" : "https://obs.cn-north-4.myhuaweicloud.com:443/obs-vod-1/%7Bproject_id%7D/f488337c31c8e4622f1590735b134c65/cover/Cover0.jpg?AWSAccessKeyId=CBN2J**********0RCSN&Expires=1518147619&Signature=kZYh0hEos2V**********AHGyXA%3D", "subtitle_upload_urls" : [ "https://obs-vod-1.obs.cn-north-4.myhuaweicloud.com:443/14ce1d4437164aba8b364ce15866154e/53a018d2dc53ca07eb5a07a839205c9d/subtitle/1.srt?AWSAccessKeyId=CBN2J**********0RCSN&Expires=1534760131&Signature=kZYh0hEos2V**********AHGyXA%3D" ], "target" : { "bucket" : "obs-vod-1", "location" : "cn-north-4", "object" : "093bb6b6c4fc460ab90a40d8b821dda3/a2053aef99725711dad3e02dc6cd5f89/0a9b70035b78b8a19c6d9e7c2693d93c.mp4" } } 状态码: 403 处理失败返回。 { "error_code" : "VOD.10064", "error_msg" : "Media asset classification does not exist, please check." }
-
请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必选。 通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必选,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必选,请求的发生时间。 表3 请求Body参数 参数 是否必选 参数类型 描述 title 是 String 媒资标题,长度不超过128个字节,UTF-8编码。 description 否 String 视频描述,长度不超过1024个字节。 video_name 是 String 音视频文件名,长度不超过128个字节。 文件名后缀可选。 video_type 是 String 上传音视频文件的格式。 取值如下: 视频文件:MP4、TS、MOV、MXF、MPG、FLV、WMV、AVI、M4V、F4V、MPEG、3GP、ASF、MKV、WEBM 音频文件:MP3、OGG、WAV、WMA、APE、FLAC、AAC、AC3、MMF、AMR、M4A、M4R、WV、MP2 若上传格式为音频文件,则不支持转码、添加水印和字幕。 category_id 否 Integer 媒资分类ID。 您可以调用创建媒资分类接口或在点播控制台的分类设置中创建对应的媒资分类,并获取分类ID。 说明: 若不设置或者设置为-1,则上传的音视频归类到系统预置的“其它”分类中。 video_md5 否 String 建议参考《API参考》附录下生成MD5值的媒资上传和更新示例。 cover_type 否 String 封面图片文件类型。 取值如下: JPG PNG 上传后的封面名称是固定的,后缀名为封面类型缩写。例如cover0.jpg,cover1.png 若不指定类型,则封面文件无后缀名。 说明: 如果设置了图片格式,则不会执行首帧截图作为封面动作,需自行上传封面。 cover_md5 否 String 封面图片文件MD5值。建议参考《API参考》附录下生成MD5值的媒资上传和更新示例。 subtitles 否 Array of Subtitle objects 字幕文件信息 tags 否 String 视频标签 。 单个标签不超过24个字节,最多不超过16个标签。 多个用逗号分隔,UTF8编码。 auto_publish 否 Integer 是否自动发布。 取值如下: 0:表示不自动发布。 1:表示自动发布。 默认值:1。 template_group_name 否 String 转码模板组名称。 若不为空,则使用指定的转码模板对上传的音视频进行转码,您可以在 视频点播 控制台配置转码模板,具体请参见《点播服务用户指南》中的“转码设置”。 说明: 若同时设置了“template_group_name”和“workflow_name”字段,则“template_group_name”字段生效。 auto_encrypt 否 Integer 是否自动加密。 取值如下: 0:表示不加密。 1:表示需要加密。 默认值:0。 加密与转码必须要一起进行,当需要加密时,转码参数不能为空,且转码输出格式必须要为HLS。 auto_preheat 否 String 是否自动预热到CDN。 取值如下: 0:表示不自动预热。 1:表示自动预热。 默认值:0。 thumbnail 否 Thumbnail object 截图参数 review 否 Review object 媒资审核参数。 说明: 仅“华北-北京一”、“华北-北京四”点播服务支持此功能。 workflow_name 否 String 工作流名称。若不为空,则使用指定的工作流对上传的音视频进行处理,您可以在视频点播控制台配置工作流,具体请参见《点播服务用户指南》中的“工作流设置”。 表4 Subtitle 参数 是否必选 参数类型 描述 id 是 Integer 字幕id。 取值范围:[1,16]。 type 是 String 字幕文件类型,目前暂只支持“SRT”和“VTT”。 language 是 String 字幕语言类型。 name 否 String 字幕文件名称。 md5 否 String 字幕文件的MD5值。 description 否 String 字幕描述。 表5 Thumbnail 参数 是否必选 参数类型 描述 type 是 String 截图类型。 取值如下: time:每次进行截图的间隔时间。 dots: 按照指定的时间点截图。 quantity: 按照指定张数,根据视频时长等分视频截图。 quantity 否 Integer type取值为quantity时必填。 按照指定张数,根据视频时长等分视频截图。 取值范围:[1,10]之间的整数。 quantity_time 否 Integer type取值为quantity时选填。 按照指定时间间隔取指定张数截图。 取值范围:[0,2147483647]之间的整数。 time 否 Integer 根据时间间隔采样时的时间间隔值。单位:秒。 type取值为time时。 默认值:12 取值范围:[0,100]之间的整数。 dots 否 Array of integers type取值为dots时必填。指定时间截图时的时间点数组。 cover_position 否 Integer 该值表示指定第几张截图作为封面。 默认值:1。 format 否 Integer 截图文件格式。 取值如下: 1:jpg。 默认值:1 。 aspect_ratio 否 Integer 纵横比,图像缩放方式。 取值如下: 0:自适应(保持原有宽高比)。 1:16:9。 默认值:0。 max_length 否 Integer 截图最长边的尺寸。 单位:像素。 宽边尺寸按照该尺寸与原始视频像素等比缩放计算。 默认值:480。 表6 Review 参数 是否必选 参数类型 描述 template_id 是 String 审核模板ID。您可以在视频点播控制台配置审核模板后获取,具体请参见《点播服务用户指南》中的“审核设置”。 说明: 仅“华北-北京一”、“华北-北京四”点播服务支持此功能。 interval 否 Integer 截图检测时间间隔,取值范围为[0,100],该参数在请求参数中忽略。 politics 否 Integer 鉴政内容检测置信度,取值范围为[0,100],该参数在请求参数中忽略。 置信度越高,说明审核结果越可信。未开启或设置为0时,表示未进行此项检测。 terrorism 否 Integer 鉴恐内容的检测置信度,取值范围为[0,100],该参数在请求参数中忽略。 置信度越高,说明审核结果越可信。未开启或设置为0时,表示未进行此项检测。 porn 否 Integer 鉴黄内容的检测置信度,取值范围为[0,100],该参数在请求参数中忽略。 置信度越高,说明审核结果越可信。未开启或设置为0时,表示未进行此项检测。
-
请求示例 创建媒资 POST https://{endpoint}/v1/{project_id}/asset Content-Type: application/json { "title": "Avatar test test", "description": "Avatar, test", "category_id": -1, "tags": "mytags", "video_name": "Avatar_480P.mp4", "video_type": "MP4", "video_md5": "a945d4b3d8fc317190a9332fe856f03d", "cover_type": "JPG", "cover_md5": "a655d4b3d8fc758691a9332fe387f26c", "auto_publish": 0, "subtitles": [ { "id": 1, "language": "CN", "type": "SRT", "md5": "SqcyFjJZoDZaP8oKIY6rgQ==", "description": "AAAAA" } ] }
-
功能说明 对于较大文件上传,可以切分成段上传。用户可以在如下的应用场景内(但不仅限于此),使用分段上传的模式: 上传超过100MB大小的文件。 网络条件较差,和OBS服务端之间的链接经常断开。 上传前无法确定将要上传文件的大小。 使用分段上传具有以下优势: 提高吞吐量——您可以使用并行上传段以提高吞吐量。 从任何网络问题中快速恢复——较小的段大小可以将由于网络错误而需重启失败的上传所产生的影响降至最低。 暂停和恢复对象上传——您可以随时上传对象段。启动多段上传后,不存在过期期限;您必须显式地完成或取消多段上传任务。 在得知最终对象大小之前开始上传——您可以在创建对象的同时上传对象。 分段上传分为如下3个步骤: 初始化分段上传任务(ObsClient.initiateMultipartUpload)。 逐个或并行上传段(ObsClient.uploadPart)。 合并段(ObsClient.completeMultipartUpload)或取消分段上传任务(ObsClient.abortMultipartUpload)。
-
对象上传简介(Java SDK) 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。 在OBS中,用户操作的基本数据单元是对象。OBS Java SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 流式上传 文件上传 分段上传 追加上传 断点续传上传 基于表单上传 SDK支持上传0KB~5GB的对象。流式上传、文件上传和追加上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 父主题: 上传对象(Java SDK)
-
异步上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.BeginPutObject和ObsClient.EndPutObject,进行异步上传对象。 本示例用于异步上传本地“localfile”文件到桶名为“bucketname”里,名称为“objectname”的对象。 示例代码如下: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 异步上传文件 try { PutObjectRequest request = new PutObjectRequest() { BucketName = "bucketname", ObjectKey = "objectname", FilePath = "localfile",//待上传的本地文件路径,需要指定到具体的文件名 }; client.BeginPutObject(request, delegate(IAsyncResult ar){ try { PutObjectResponse response = client.EndPutObject(ar); Console.WriteLine("put object response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } }, null); } catch (ObsException ex) { Console.WriteLine("Message: {0}", ex.Message); } 更多上传对象的信息,请参见上传对象。 父主题: 上传对象
-
对象上传简介 在OBS中,用户操作的基本数据单元是对象。OBS iOS SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 流式上传 文件上传 分段上传 追加上传 断点续传上传 SDK支持上传0KB~5GB的对象。流式上传、文件上传和追加上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 父主题: 上传对象
-
对象上传简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 在OBS中,用户操作的基本数据单元是对象。OBS PHP SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 文本上传 流式上传 文件上传 分段上传 基于表单上传 SDK支持上传0KB~5GB的对象。流式上传和文件上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 父主题: 上传对象
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格