全部产品
对象存储 OSS

下载文件

更新时间:2017-06-07 13:26:11   分享:   

简单下载

下载文件,可以指定下载为本地文件,或者下载为NSData:

  1. OSSGetObjectRequest * request = [OSSGetObjectRequest new];
  2. // 必填字段
  3. request.bucketName = @"<bucketName>";
  4. request.objectKey = @"<objectKey>";
  5. // 可选字段
  6. request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
  7. // 当前下载段长度、当前已经下载总长度、一共需要下载的总长度
  8. NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
  9. };
  10. // request.range = [[OSSRange alloc] initWithStart:0 withEnd:99]; // bytes=0-99,指定范围下载
  11. // request.downloadToFileURL = [NSURL fileURLWithPath:@"<filepath>"]; // 如果需要直接下载到文件,需要指明目标文件地址
  12. OSSTask * getTask = [client getObject:request];
  13. [getTask continueWithBlock:^id(OSSTask *task) {
  14. if (!task.error) {
  15. NSLog(@"download object success!");
  16. OSSGetObjectResult * getResult = task.result;
  17. NSLog(@"download result: %@", getResult.dowloadedData);
  18. } else {
  19. NSLog(@"download object failed, error: %@" ,task.error);
  20. }
  21. return nil;
  22. }];
  23. // [getTask waitUntilFinished];
  24. // [request cancel];

图片处理

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

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

SDK中使用时,只需要在下载图片时,为request设置xOssProcess属性。示例:

  1. OSSGetObjectRequest * request = [OSSGetObjectRequest new];
  2. request.bucketName = @"<bucketName>";
  3. request.objectKey = @"example.jpg";
  4. // 图片处理
  5. request.xOssProcess = @"image/resize,m_lfit,w_100,h_100";
  6. OSSTask * getTask = [client getObject:request];
  7. [getTask continueWithBlock:^id(OSSTask *task) {
  8. if (!task.error) {
  9. NSLog(@"download image success!");
  10. OSSGetObjectResult * getResult = task.result;
  11. NSLog(@"download image data: %@", getResult.dowloadedData);
  12. } else {
  13. NSLog(@"download object failed, error: %@" ,task.error);
  14. }
  15. return nil;
  16. }];
  17. // [getTask waitUntilFinished];
  18. // [request cancel];

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

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

流式下载

实际上,SDK没有提供stream类型的下载接口,但是提供了类似NSURLSession库的didRecieveData的分段回调功能,下载时,每次得到一段数据,会回调这个函数进行通知。注意,如果设置了这个回调,下载的结果将不再包含实际数据。

  1. OSSGetObjectRequest * request = [OSSGetObjectRequest new];
  2. // required
  3. request.bucketName = @"<bucketName>";
  4. request.objectKey = @"<objectKey>";
  5. // 分段回调函数
  6. request.onRecieveData = ^(NSData * data) {
  7. NSLog(@"Recieve data, length: %ld", [data length]);
  8. };
  9. OSSTask * getTask = [client getObject:request];
  10. [getTask continueWithBlock:^id(OSSTask *task) {
  11. if (!task.error) {
  12. NSLog(@"download object success!");
  13. } else {
  14. NSLog(@"download object failed, error: %@" ,task.error);
  15. }
  16. return nil;
  17. }];
  18. // [getTask waitUntilFinished];
  19. // [request cancel];

指定范围下载

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

  1. OSSGetObjectRequest * request = [OSSGetObjectRequest new];
  2. request.bucketName = @"<bucketName>;
  3. request.objectKey = @"<objectKey>";
  4. request.range = [[OSSRange alloc] initWithStart:1 withEnd:99]; // bytes=1-99
  5. // request.range = [[OSSRange alloc] initWithStart:-1 withEnd:99]; // bytes=-99
  6. // request.range = [[OSSRange alloc] initWithStart:10 withEnd:-1]; // bytes=10-
  7. request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
  8. NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
  9. };
  10. OSSTask * getTask = [client getObject:request];
  11. [getTask continueWithBlock:^id(OSSTask *task) {
  12. if (!task.error) {
  13. NSLog(@"download object success!");
  14. OSSGetObjectResult * getResult = task.result;
  15. NSLog(@"download result: %@", getResult.dowloadedData);
  16. } else {
  17. NSLog(@"download object failed, error: %@" ,task.error);
  18. }
  19. return nil;
  20. }];
  21. // [getTask waitUntilFinished];
  22. // [request cancel];

只获取文件元信息

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

  1. OSSHeadObjectRequest * request = [OSSHeadObjectRequest new];
  2. request.bucketName = @"<bucketName>;
  3. request.objectKey = @"<objectKey>";
  4. OSSTask * headTask = [client headObject:request];
  5. [headTask continueWithBlock:^id(OSSTask *task) {
  6. if (!task.error) {
  7. NSLog(@"head object success!");
  8. OSSHeadObjectResult * result = task.result;
  9. NSLog(@"header fields: %@", result.httpResponseHeaderFields);
  10. for (NSString * key in result.objectMeta) {
  11. NSLog(@"ObjectMeta: %@ - %@", key, [result.objectMeta objectForKey:key]);
  12. }
  13. } else {
  14. NSLog(@"head object failed, error: %@" ,task.error);
  15. }
  16. return nil;
  17. }];
本文导读目录
本文导读目录
以上内容是否对您有帮助?