如何使用QuickBlox API下载图像?

时间:2014-12-28 04:36:14

标签: ios objective-c web nsdata quickblox

我尝试使用Quickblox API下载图像文件。我可以上传文件,但是当我尝试下载时,NSData图片无法显示图片。

// Upload a user avatar, previously log in Quickblox API
                NSData *avatar = UIImagePNGRepresentation([UIImage imageNamed:@"userWhite"]);
                [QBRequest TUploadFile:avatar fileName:@"avatar.png" contentType:@"image/png" isPublic:YES successBlock:^(QBResponse *response, QBCBlob *blob) {
                    // Success
                } statusBlock:^(QBRequest *request, QBRequestStatus *status) {

                } errorBlock:^(QBResponse *response) {

                }];

图片上传:Image

下载头像:

 NSString* userProfilePictureID = [NSString stringWithFormat:@"%ld",(long)[[LocalStorageService shared] currentUser].blobID]; // user - an instance of QBUUser class
    // download user profile picture
    [QBRequest downloadFileWithUID:@"318547" successBlock:^(QBResponse *response, NSData *fileData) { UIImage* image = [UIImage imageWithData:fileData];

    } statusBlock:^(QBRequest *request, QBRequestStatus *status) {

    } errorBlock:^(QBResponse *response) {
    }];

UIImage不显示任何图像。我能做什么? NSData未被破坏。

1 个答案:

答案 0 :(得分:1)

您的下载代码看起来正确。您基本上应该调用QBRequest方法并将blob.UID传递给它。 但就我而言,blob.UID就是这样9357c3d66b944880a82cdbeb836f143c00。但是我已经采取了一些步骤来完成你的任务:

1)注册或登录用户

致电+[QBRequest signUp:successBlock:errorBlock:]+[QBRequest logInWithUserLogin:password:successBlock:errorBlock]

2)枚举当前用户的所有可用blob

  [QBRequest blobsWithSuccessBlock:^(QBResponse* response,
                                     QBGeneralResponsePage* page,
                                     NSArray* blobs) {
      [self findAndShowAvatarFromBlobs:blobs];
  } errorBlock:^(QBResponse* response) { <...> }];

3)找到所需的blob并下载

- (void)findAndShowAvatarFromBlobs:(NSArray*)blobs {
  for (QBCBlob* blob in blobs) {
    if ([blob.name hasPrefix:@"avatar"]) {
      [QBRequest downloadFileWithUID:blob.UID
          successBlock:^(QBResponse* response, NSData* fileData) {
              UIImage* image = [UIImage imageWithData:fileData];
              self.imageView.image = image;
          }
          statusBlock:^(QBRequest* request, QBRequestStatus* status) { <...> }
          errorBlock:^(QBResponse* response) { <...> }];
    }
  }
}

你可能遇到有效的blob UID问题(我怀疑你使用的是与UID不同的blob ID)。你有可能使用同样的逻辑吗?

您可以在此处找到完整的项目:https://dl.dropboxusercontent.com/u/930742/so/QuickBloxSample.zip

创建必要的用户,上传然后下载图片,并在UIImageView中显示所有描述的步骤。 (不要忘记在AppDelegate)中设置服务和应用程序密钥

P.S。在管理面板中,您可以通过单击“内容”表中的ID来查找blob UID click on ID

here is UID