我尝试使用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
未被破坏。
答案 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