全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
对象存储 OSS

下载文件

更新时间:2017-10-31 13:58:11

简单下载

下载指定文件,下载后将获得文件的输入流,此操作要求用户对该Object有读权限。同步调用:

  1. //构造下载文件请求
  2. GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");
  3. //设置下载进度回调
  4. get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() {
  5. @Override
  6. public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
  7. OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false);
  8. }
  9. });
  10. try {
  11. // 同步执行下载请求,返回结果
  12. GetObjectResult getResult = oss.getObject(get);
  13. Log.d("Content-Length", "" + getResult.getContentLength());
  14. // 获取文件输入流
  15. InputStream inputStream = getResult.getObjectContent();
  16. byte[] buffer = new byte[2048];
  17. int len;
  18. while ((len = inputStream.read(buffer)) != -1) {
  19. // 处理下载的数据,比如图片展示或者写入文件等
  20. }
  21. // 下载后可以查看文件元信息
  22. ObjectMetadata metadata = getResult.getMetadata();
  23. Log.d("ContentType", metadata.getContentType());
  24. } catch (ClientException e) {
  25. // 本地异常如网络异常等
  26. e.printStackTrace();
  27. } catch (ServiceException e) {
  28. // 服务异常
  29. Log.e("RequestId", e.getRequestId());
  30. Log.e("ErrorCode", e.getErrorCode());
  31. Log.e("HostId", e.getHostId());
  32. Log.e("RawMessage", e.getRawMessage());
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. }

异步调用:

  1. GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");
  2. //设置下载进度回调
  3. get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() {
  4. @Override
  5. public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
  6. OSSLog.logDebug("getobj_progress: " + currentSize+" total_size: " + totalSize, false);
  7. }
  8. });
  9. OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
  10. @Override
  11. public void onSuccess(GetObjectRequest request, GetObjectResult result) {
  12. // 请求成功
  13. InputStream inputStream = result.getObjectContent();
  14. byte[] buffer = new byte[2048];
  15. int len;
  16. try {
  17. while ((len = inputStream.read(buffer)) != -1) {
  18. // 处理下载的数据
  19. }
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. @Override
  25. public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  26. // 请求异常
  27. if (clientExcepion != null) {
  28. // 本地异常如网络异常等
  29. clientExcepion.printStackTrace();
  30. }
  31. if (serviceException != null) {
  32. // 服务异常
  33. Log.e("ErrorCode", serviceException.getErrorCode());
  34. Log.e("RequestId", serviceException.getRequestId());
  35. Log.e("HostId", serviceException.getHostId());
  36. Log.e("RawMessage", serviceException.getRawMessage());
  37. }
  38. }
  39. });

图片处理

OSS图片处理,是OSS对外提供的海量、安全、低成本、高可靠的图片处理服务。用户将原始图片上传保存到OSS,通过简单的 RESTful 接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。图片处理提供图片处理接口,图片上传请使用上传接口。基于OSS图片处理,用户可以搭建自己的图片处理服务。

OSS图片处理提供以下功能:

SDK中使用时,只需要在下载图片时,调用request.setxOssProcess()方法设置处理参数。示例:

  1. // 构造图片下载请求
  2. GetObjectRequest get = new GetObjectRequest("<bucketName>", "example.jpg");
  3. // 图片处理
  4. request.setxOssProcess("image/resize,m_fixed,w_100,h_100");
  5. OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
  6. @Override
  7. public void onSuccess(GetObjectRequest request, GetObjectResult result) {
  8. // 请求成功
  9. InputStream inputStream = result.getObjectContent();
  10. byte[] buffer = new byte[2048];
  11. int len;
  12. try {
  13. while ((len = inputStream.read(buffer)) != -1) {
  14. // 处理下载的数据
  15. }
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. @Override
  21. public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  22. // 处理异常
  23. }
  24. });

需要对图片进行其它处理,只要替换request.setxOssProcess()的参数就可以了。需要帮助,请参考:

  • 可视化图片处理工具 ImageStyleViever ,可以直观的看到OSS图片处理的结果
  • OSS图片处理的功能、使用演示 页面

指定范围下载

您可以在下载文件时指定一段范围,对于较大的Object适于使用此功能;如果在请求头中使用Range参数,则返回消息中会包含整个文件的长度和此次返回的范围。如:

  1. GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");
  2. // 设置范围
  3. get.setRange(new Range(0, 99)); // 下载0到99字节共100个字节,文件范围从0开始计算
  4. // get.setRange(new Range(100, Range.INFINITE)); // 下载从100个字节到结尾
  5. OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
  6. @Override
  7. public void onSuccess(GetObjectRequest request, GetObjectResult result) {
  8. // 请求成功
  9. InputStream inputStream = result.getObjectContent();
  10. byte[] buffer = new byte[2048];
  11. int len;
  12. try {
  13. while ((len = inputStream.read(buffer)) != -1) {
  14. // 处理下载的数据
  15. }
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. @Override
  21. public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  22. // 请求异常
  23. if (clientExcepion != null) {
  24. // 本地异常如网络异常等
  25. clientExcepion.printStackTrace();
  26. }
  27. if (serviceException != null) {
  28. // 服务异常
  29. Log.e("ErrorCode", serviceException.getErrorCode());
  30. Log.e("RequestId", serviceException.getRequestId());
  31. Log.e("HostId", serviceException.getHostId());
  32. Log.e("RawMessage", serviceException.getRawMessage());
  33. }
  34. }
  35. });

只获取文件元信息

通过headObject方法可以只获文件元信息而不获取文件的实体。代码如下:

  1. // 创建同步获取文件元信息请求
  2. HeadObjectRequest head = new HeadObjectRequest("<bucketName>", "<objectKey>");
  3. OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() {
  4. @Override
  5. public void onSuccess(HeadObjectRequest request, HeadObjectResult result) {
  6. Log.d("headObject", "object Size: " + result.getMetadata().getContentLength());
  7. Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType());
  8. }
  9. @Override
  10. public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  11. // 请求异常
  12. if (clientExcepion != null) {
  13. // 本地异常如网络异常等
  14. clientExcepion.printStackTrace();
  15. }
  16. if (serviceException != null) {
  17. // 服务异常
  18. Log.e("ErrorCode", serviceException.getErrorCode());
  19. Log.e("RequestId", serviceException.getRequestId());
  20. Log.e("HostId", serviceException.getHostId());
  21. Log.e("RawMessage", serviceException.getRawMessage());
  22. }
  23. }
  24. });
  25. // task.waitUntilFinished();
本文导读目录