• 关于

    Android添加水印

    的搜索结果

问题

直播推流 添加水印部分手机 添加不上去 是什么原因 Android

周周安 2019-12-01 20:07:15 1194 浏览量 回答数 1

回答

阿里云Ingress除了提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机外,还支持将所有用户的HTTP请求日志记录到标准输出中。同时Ingress访问日志与阿里云日志服务打通,您可以使用日志服务快速创建日志分析和监控大盘。 前提条件 安装日志组件。 集群创建时,默认会安装日志组件,如未安装,请参考 使用日志服务进行Kubernetes日志采集进行手动安装。 升级Log Controller。 升级kube-system命名空间下的无状态应用(Deployment)alibaba-log-controller,替换以下内容: 镜像名称:registry-vpc.{region-id}.aliyuncs.com/acs/log-controller ,将其中的{region-id}替换为您集群所在Region ID,例如cn-hangzhou、cn-beijing、ap-southeast-1等。 镜像版本(Tag):版本不低于0.2.0.0-7f4d3bb-aliyun。 以下两种升级方法您可任选其一: 通过执行kubectl命令kubectl edit deployment alibaba-log-controller -n kube-system进行升级。 通过容器服务控制台升级。进入应用 > 无状态(Deployment),选择对应集群的命名空间kube-system,编辑alibaba-log-controller并保存。 部署Ingress采集配置 apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in you k8s cluster name: k8s-nginx-ingress spec: # logstore name to upload log logstore: nginx-ingress # product code, only for k8s nginx ingress productCode: k8s-nginx-ingress # logtail config detail logtailConfig: inputType: plugin # logtail config name, should be same with [metadata.name] configName: k8s-nginx-ingress inputDetail: plugin: inputs: - type: service_docker_stdout detail: IncludeLabel: io.kubernetes.container.name: nginx-ingress-controller Stderr: false Stdout: true processors: - type: processor_regex detail: KeepSource: false Keys: - client_ip - x_forward_for - remote_user - time - method - url - version - status - body_bytes_sent - http_referer - http_user_agent - request_length - request_time - proxy_upstream_name - upstream_addr - upstream_response_length - upstream_response_time - upstream_status - req_id - host NoKeyError: true NoMatchError: true Regex: ^(\S+)\s-\s[([^]]+)]\s-\s(\S+)\s[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"])"\s"([^"])"\s(\S+)\s(\S+)+\s[([^]])]\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S*).* SourceKey: content 日志采集配置针对Kubernetes进行了CRD扩展,可直接部署AliyunLogConfig的CRD配置,Log Controller会自动创建日志服务相关采集配置和报表资源,部署方式任选其一: 注意 请确保日志组件 alibaba-log-controller版本不低于0.2.0.0-76648ee-aliyun。更新版本后,若已经应用了该CRD配置,请删除该配置并重新应用。 上述配置只针对阿里云Kubernetes默认Ingress Controller中的日志格式生效,若您修改过Ingress Controller的访问日志格式,请根据通过DaemonSet-CRD方式采集日志修改上述CRD配置中的正则表达式提取processor_regex部分。 使用Kubectl命令部署 将上述CRD配置保存成nginx-ingress.yaml ,执行 kubectl apply -f 命令进行部署。 使用编排模板部署 登录容器服务管理控制台。 将上述CRD配置保存成编排模板。 有关创建编排模板的具体步骤,请参见创建编排模板。 基于该模板创建应用,选择您所在集群的default命名空间。 查看Ingress日志与报表 登录日志服务控制台。 在Project列表区域,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为 k8s-log-{cluster-id})。 在Project详情页面,默认进入日志库页面。名称为nginx-ingress的日志库(logstore)存放着所有的Ingress访问日志。单击左侧导航栏中的仪表盘进入仪表盘列表,可查看到所有Ingress的分析报表。 Ingress概览 Ingress概览报表主要展示当前Ingress的整体状态,主要包括以下几类信息: 整体架构状态(1天),包括PV、UV、流量、响应延迟、移动端占比和错误比例等。 网站实时状态(1分钟),包括PV、UV、成功率、5XX比例、平均延迟和P95/P99延迟等。 用户请求类信息(1天),包括1天/7天访问PV对比、访问地域分布、TOP访问省份/城市、移动端占比和Android/IOS占比等。 TOPURL统计(1小时),包括访问TOP10、延迟TOP10、5XX错误TOP10和404错误TOP10。 ingress概览 Ingress访问中心 Ingress访问中心主要侧重于用于访问请求相关的统计信息,一般用于运营分析,包括当日UV/PV、UV/PV分布、UV/PV趋势、TOP访问省份/城市、TOP访问浏览器、TOP访问IP、移动端占比和Android/IOS占比等。 ingress访问中心 Ingress监控中心 Ingress监控中心主要侧重于网站实时监控数据,一般用于完整实时监控与告警,包括请求成功率、错误比例、5XX比例、请求未转发比例、平均延迟、P95/P99/P9999延迟、状态码分布、Ingress压力分布、Service访问TOP10、Service错误TOP10、Service延迟TOP10和Service流量TOP10等。 Ingress监控中心 Ingress蓝绿发布监控中心 Ingress蓝绿发布监控中心主要用于版本发布时的实时监控与对比(版本前后对比以及蓝绿版本当前对比),以便您在服务发布时快速检测异常并进行回滚。在该报表中您需要选择进行对比的蓝绿版本(ServiceA和ServiceB),报表将根据您的选择动态显示蓝绿版本相关指标,包括PV、5XX比例、成功率、平均延迟、P95/P99/P9999延迟和流量等。 Ingress蓝绿发布监控中心 Ingress异常检测中心 Ingress异常检测中心基于日志服务提供的机器学习算法,通过多种时序分析算法从Ingress的指标中自动检测异常点,提高问题发现的效率。 Ingress异常检测中心 配置告警 日志服务除提供交互式分析、可视化报表之外,您可直接基于上述报表快速配置告警,告警支持通知钉钉WebHook、短信、邮件和自定义WebHook等。 告警详细配置方法请参考设置告警。 下述示例为Ingress配置5XX比例的告警,告警每5分钟执行一次,当5XX比例超过1%时触发。 进入Ingress监控中心报表,鼠标滑动到图表5XX比例的右上角,在弹出的提示框中单击新建告警。 配置告警 在告警页面中,填入告警名称、查询区间和执行间隔,查询语句中的total为5XX的百分比,因此触发条件填入:total > 1。 设置告警 在下一步的通知选项中,根据您的需求选择对应的通知方式,并填入对应参数即可完成告警创建。 设置通知 订阅定时报告 日志服务除支持通过告警方式通知外,还支持报表订阅功能,您可使用该功能将报表定期渲染成图片并通过邮件、钉钉群等方式发送。 订阅功能详细使用方法请参考订阅仪表盘。 下述示例为Ingress概览配置订阅功能,每天上午10点将报表发送到指定钉钉群: 进入Ingress概览报表,单击报表右上角的订阅按钮。 在弹出的配置页面中,频率选择每天、10:00,关闭添加水印选项。 通知类型中选择钉钉机器人,填入钉钉机器人的WebHook地址(WebHook地址请参见获取 Webhook 地址)即可完成订阅。

1934890530796658 2020-03-31 15:27:20 0 浏览量 回答数 0

回答

本文介绍如何下载文件。 简单下载 下载指定文件,下载后将获得文件的输入流,此操作要求用户对该Object有读权限。 同步调用: //构造下载文件请求 GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>"); //设置下载进度回调 get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() { @Override public void onProgress(GetObjectRequest request, long currentSize, long totalSize) { OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false); } }); try { // 同步执行下载请求,返回结果 GetObjectResult getResult = oss.getObject(get); Log.d("Content-Length", "" + getResult.getContentLength()); // 获取文件输入流 InputStream inputStream = getResult.getObjectContent(); byte[] buffer = new byte[2048]; int len; while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据,比如图片展示或者写入文件等 } // 下载后可以查看文件元信息 ObjectMetadata metadata = getResult.getMetadata(); Log.d("ContentType", metadata.getContentType()); } catch (ClientException e) { // 本地异常如网络异常等 e.printStackTrace(); } catch (ServiceException e) { // 服务异常 Log.e("RequestId", e.getRequestId()); Log.e("ErrorCode", e.getErrorCode()); Log.e("HostId", e.getHostId()); Log.e("RawMessage", e.getRawMessage()); } catch (IOException e) { e.printStackTrace(); } 异步调用: GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>"); //设置下载进度回调 get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() { @Override public void onProgress(GetObjectRequest request, long currentSize, long totalSize) { OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false); } }); OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } }); 图片处理 OSS图片处理是OSS对外提供的海量、安全、低成本、高可靠的图片处理服务。 用户将原始图片上传保存到OSS,通过简单的 RESTful 接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。 图片处理提供图片处理接口,图片上传请使用上传接口。基于OSS图片处理,用户可以搭建自己的图片处理服务。 图片处理的详细信息请参见OSS图片处理指南。 OSS图片处理提供以下功能: 获取图片信息 图片格式转换 图片缩放 图片裁剪 图片旋转 图片效果 图片水印,包括添加图片、文字、图文混合水印 自定义图片处理样式 级联处理,调用多个图片处理功能 SDK中使用时,只需要在下载图片时,调用request.setxOssProcess()方法设置处理参数。示例: // 构造图片下载请求 GetObjectRequest get = new GetObjectRequest("<bucketName>", "example.jpg"); // 图片处理 request.setxOssProcess("image/resize,m_fixed,w_100,h_100"); OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 处理异常 } }); 需要对图片进行其它处理,只要替换request.setxOssProcess()的参数就可以了。需要帮助,请参考: 可视化图片处理工具   ImageStyleViever  ,可以直观的看到OSS图片处理的结果 OSS图片处理的功能、使用演示   页面 指定范围下载 您可以在下载文件时指定一段范围,对于较大的Object适于使用此功能;如果在请求头中使用Range参数,则返回消息中会包含整个文件的长度和此次返回的范围。 如: GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>"); // 设置范围 get.setRange(new Range(0, 99)); // 下载0到99字节共100个字节,文件范围从0开始计算// get.setRange(new Range(100, Range.INFINITE)); // 下载从100个字节到结尾 OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } }); 只获取文件元信息 通过headObject方法可以只获文件元信息而不获取文件的实体。代码如下: // 创建同步获取文件元信息请求 HeadObjectRequest head = new HeadObjectRequest("<bucketName>", "<objectKey>"); OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() { @Override public void onSuccess(HeadObjectRequest request, HeadObjectResult result) { Log.d("headObject", "object Size: " + result.getMetadata().getContentLength()); Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType()); } @Override public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } }); // task.waitUntilFinished(); 数据完整性校验 因为移动端网络环境的复杂性,数据在客户端和服务器之间传输时有可能会出错。因此OSS SDK提供了基于CRC的端到端的数据完整性效验。 CRC校验 在读取下载数据流的时候,如果开启了crc效验,会在数据流读取完毕后自动验证数据完整性。 GetObjectRequest request = new GetObjectRequest(OSSTestConfig.ANDROID_TEST_BUCKET, testFile); //开启CRC效验 request.setCRC64(OSSRequest.CRC64Config.YES); //....try{ GetObjectResult result = oss.getObject(request); InputStream in = result.getObjectContent(); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[BUFFER_SIZE]; int len; while ((len = in.read(buffer)) > -1) { output.write(buffer, 0, len); } output.flush(); in.close(); }catch(ClientException e){ //... }catch(InconsistentException e){ //.... }

51干警网 2019-12-02 00:35:25 0 浏览量 回答数 0

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

问题

Android-SDK之如何实现下载文件(二)?

青衫无名 2019-12-01 21:41:29 1126 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档简单下载下载指定文件,下载后将获得文件的输入流,此操作要求用户对该Object有读权限。同步调用: //构造下载文件请求GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");//设置下载进度回调get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() { @Override public void onProgress(GetObjectRequest request, long currentSize, long totalSize) { OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false); } });try { // 同步执行下载请求,返回结果 GetObjectResult getResult = oss.getObject(get); Log.d("Content-Length", "" + getResult.getContentLength()); // 获取文件输入流 InputStream inputStream = getResult.getObjectContent(); byte[] buffer = new byte[2048]; int len; while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据,比如图片展示或者写入文件等 } // 下载后可以查看文件元信息 ObjectMetadata metadata = getResult.getMetadata(); Log.d("ContentType", metadata.getContentType());} catch (ClientException e) { // 本地异常如网络异常等 e.printStackTrace();} catch (ServiceException e) { // 服务异常 Log.e("RequestId", e.getRequestId()); Log.e("ErrorCode", e.getErrorCode()); Log.e("HostId", e.getHostId()); Log.e("RawMessage", e.getRawMessage());} catch (IOException e) { e.printStackTrace();} 异步调用: GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");//设置下载进度回调get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() { @Override public void onProgress(GetObjectRequest request, long currentSize, long totalSize) { OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false); } });OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } }}); 图片处理OSS图片处理,是OSS对外提供的海量、安全、低成本、高可靠的图片处理服务。用户将原始图片上传保存到OSS,通过简单的 RESTful 接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。图片处理提供图片处理接口,图片上传请使用上传接口。基于OSS图片处理,用户可以搭建自己的图片处理服务。 OSS图片处理提供以下功能: 获取图片信息图片格式转换图片缩放、裁剪、旋转图片效果图片添加图片、文字、图文混合水印自定义图片处理样式,在控制台的 图片处理 -> 样式管理 中定义通过级联处理调用多个图片处理功能 SDK中使用时,只需要在下载图片时,调用request.setxOssProcess()方法设置处理参数。示例: // 构造图片下载请求GetObjectRequest get = new GetObjectRequest("<bucketName>", "example.jpg");// 图片处理request.setxOssProcess("image/resize,m_fixed,w_100,h_100");OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 处理异常 }}); 需要对图片进行其它处理,只要替换request.setxOssProcess()的参数就可以了。需要帮助,请参考: 可视化图片处理工具 ImageStyleViever ,可以直观的看到OSS图片处理的结果OSS图片处理的功能、使用演示 页面 指定范围下载您可以在下载文件时指定一段范围,对于较大的Object适于使用此功能;如果在请求头中使用Range参数,则返回消息中会包含整个文件的长度和此次返回的范围。如: GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");// 设置范围get.setRange(new Range(0, 99)); // 下载0到99字节共100个字节,文件范围从0开始计算// get.setRange(new Range(100, Range.INFINITE)); // 下载从100个字节到结尾OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } }}); 只获取文件元信息通过headObject方法可以只获文件元信息而不获取文件的实体。代码如下: // 创建同步获取文件元信息请求HeadObjectRequest head = new HeadObjectRequest("<bucketName>", "<objectKey>");OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() { @Override public void onSuccess(HeadObjectRequest request, HeadObjectResult result) { Log.d("headObject", "object Size: " + result.getMetadata().getContentLength()); Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType()); } @Override public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } }});// task.waitUntilFinished(); 数据完整性校验因为移动端网络环境的复杂性,数据在客户端和服务器之间传输时有可能会出错。因此OSS SDK提供了基于CRC的端到端的数据完整性效验。 CRC校验在读取下载数据流的时候,如果开启了crc效验,会在数据流读取完毕后自动验证数据完整性。 GetObjectRequest request = new GetObjectRequest(OSSTestConfig.ANDROID_TEST_BUCKET, testFile);//开启CRC效验request.setCRC64(OSSRequest.CRC64Config.YES);//....try{ GetObjectResult result = oss.getObject(request); InputStream in = result.getObjectContent(); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[BUFFER_SIZE]; int len; while ((len = in.read(buffer)) > -1) { output.write(buffer, 0, len); } output.flush(); in.close();}catch(ClientException e){ //...}catch(InconsistentException e){ //....}

2019-12-01 23:14:06 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档简单下载下载指定文件,下载后将获得文件的输入流,此操作要求用户对该Object有读权限。同步调用: //构造下载文件请求GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");//设置下载进度回调get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() { @Override public void onProgress(GetObjectRequest request, long currentSize, long totalSize) { OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false); } });try { // 同步执行下载请求,返回结果 GetObjectResult getResult = oss.getObject(get); Log.d("Content-Length", "" + getResult.getContentLength()); // 获取文件输入流 InputStream inputStream = getResult.getObjectContent(); byte[] buffer = new byte[2048]; int len; while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据,比如图片展示或者写入文件等 } // 下载后可以查看文件元信息 ObjectMetadata metadata = getResult.getMetadata(); Log.d("ContentType", metadata.getContentType());} catch (ClientException e) { // 本地异常如网络异常等 e.printStackTrace();} catch (ServiceException e) { // 服务异常 Log.e("RequestId", e.getRequestId()); Log.e("ErrorCode", e.getErrorCode()); Log.e("HostId", e.getHostId()); Log.e("RawMessage", e.getRawMessage());} catch (IOException e) { e.printStackTrace();} 异步调用: GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");//设置下载进度回调get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() { @Override public void onProgress(GetObjectRequest request, long currentSize, long totalSize) { OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false); } });OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } }}); 图片处理OSS图片处理,是OSS对外提供的海量、安全、低成本、高可靠的图片处理服务。用户将原始图片上传保存到OSS,通过简单的 RESTful 接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。图片处理提供图片处理接口,图片上传请使用上传接口。基于OSS图片处理,用户可以搭建自己的图片处理服务。 OSS图片处理提供以下功能: 获取图片信息图片格式转换图片缩放、裁剪、旋转图片效果图片添加图片、文字、图文混合水印自定义图片处理样式,在控制台的 图片处理 -> 样式管理 中定义通过级联处理调用多个图片处理功能 SDK中使用时,只需要在下载图片时,调用request.setxOssProcess()方法设置处理参数。示例: // 构造图片下载请求GetObjectRequest get = new GetObjectRequest("<bucketName>", "example.jpg");// 图片处理request.setxOssProcess("image/resize,m_fixed,w_100,h_100");OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 处理异常 }}); 需要对图片进行其它处理,只要替换request.setxOssProcess()的参数就可以了。需要帮助,请参考: 可视化图片处理工具 ImageStyleViever ,可以直观的看到OSS图片处理的结果OSS图片处理的功能、使用演示 页面 指定范围下载您可以在下载文件时指定一段范围,对于较大的Object适于使用此功能;如果在请求头中使用Range参数,则返回消息中会包含整个文件的长度和此次返回的范围。如: GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");// 设置范围get.setRange(new Range(0, 99)); // 下载0到99字节共100个字节,文件范围从0开始计算// get.setRange(new Range(100, Range.INFINITE)); // 下载从100个字节到结尾OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); byte[] buffer = new byte[2048]; int len; try { while ((len = inputStream.read(buffer)) != -1) { // 处理下载的数据 } } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } }}); 只获取文件元信息通过headObject方法可以只获文件元信息而不获取文件的实体。代码如下: // 创建同步获取文件元信息请求HeadObjectRequest head = new HeadObjectRequest("<bucketName>", "<objectKey>");OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() { @Override public void onSuccess(HeadObjectRequest request, HeadObjectResult result) { Log.d("headObject", "object Size: " + result.getMetadata().getContentLength()); Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType()); } @Override public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } }});// task.waitUntilFinished(); 数据完整性校验因为移动端网络环境的复杂性,数据在客户端和服务器之间传输时有可能会出错。因此OSS SDK提供了基于CRC的端到端的数据完整性效验。 CRC校验在读取下载数据流的时候,如果开启了crc效验,会在数据流读取完毕后自动验证数据完整性。 GetObjectRequest request = new GetObjectRequest(OSSTestConfig.ANDROID_TEST_BUCKET, testFile);//开启CRC效验request.setCRC64(OSSRequest.CRC64Config.YES);//....try{ GetObjectResult result = oss.getObject(request); InputStream in = result.getObjectContent(); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[BUFFER_SIZE]; int len; while ((len = in.read(buffer)) > -1) { output.write(buffer, 0, len); } output.flush(); in.close();}catch(ClientException e){ //...}catch(InconsistentException e){ //....}

2019-12-01 23:14:06 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站