Quickblox:删除内容项(图片文件/blob)时出现问题
Posted
技术标签:
【中文标题】Quickblox:删除内容项(图片文件/blob)时出现问题【英文标题】:Quickblox: an issue in deleting content item (picture file / blob) 【发布时间】:2013-12-12 13:45:03 【问题描述】:当我尝试删除作为 PNG 图片文件存储在后端数据库中的内容项(用户的图片 blob 项)时,我遇到了一个奇怪的问题。
删除没有错误,但给出“422 Unprocessable Entity”。这是什么意思?在 Quickblox 管理面板中检查时,内容项的状态似乎正常且准备就绪。
我已通过以下 API 调用上传内容:
[QBContent TUploadFile:imageData fileName:@"profile.png" contentType:@"image/png" isPublic:YES delegate:self];
我正在尝试使用以下 API 调用删除对象:
[QBContent deleteBlobWithID:blobID delegate:self];
QB 日志:
Performing async request:
DELETE http://api.quickblox.com/blobs/91049.xml
headers:
"QB-SDK" = "ios 1.8";
"Qb-Token" = b9e3d1cc708c8444070544df8c642ad194509e67;
"QuickBlox-REST-API-Version" = "0.1.1";
parameters:
2013-12-12 14:33:52.328 QBTestApp[21095:6b73] Request finished, response:
headers:
"Access-Control-Allow-Origin" = "*";
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Length" = 49;
"Content-Type" = "application/xml; charset=utf-8";
Date = "Thu, 12 Dec 2013 13:33:58 GMT";
"QB-Token-ExpirationDate" = "2013-12-12 15:32:22 UTC";
"QuickBlox-REST-API-Version" = "0.1.1";
Server = "nginx/1.0.15";
Status = "422 Unprocessable Entity";
"X-Rack-Cache" = "invalidate, pass";
"X-Request-Id" = 3f235134e5aa0bd012ef78e54cddc164;
"X-Runtime" = "0.039680";
"X-UA-Compatible" = "IE=Edge,chrome=1";
body:
error:
<?xml version="1.0" encoding="UTF-8"?>
<errors/>
有什么想法我可能在这里做错了吗?提前(再次)感谢! :-)
【问题讨论】:
2013 年 14 月 12 日更新:我为此创建了一个小 testn-p,似乎我能够成功删除较旧的 blob 文件,但不能删除我创建并附加给用户的最新 blob 文件.这让我想到 blob 项目是否被锁定,以防它附加到某个用户到 user.blobID 字段中?所以解决这个问题的正确方法是从 user.blobID 字段中删除特定的 blob 链接,然后更新这样的用户对象,只有在完成后我才能删除 blob 内容文件—— > 待验证(我会在星期一检查) 【参考方案1】:您正在尝试删除不存在的 blob 文件的感觉。请确保您在上传和创建过程完成后尝试删除 blob 文件(调用 completedWithResult: 成功结果)。
如果我能在代码中看到方法调用 TUploadFile: 和 deleteBlobWithID: 的顺序,我可以更快地为您提供帮助。
【讨论】:
感谢@glebus 的反馈。不幸的是,我已经检查了通话的顺序,我可以向您保证通话之间有足够的时间。并且从 QB 仪表板中,我可以验证文件是否存在于云中,并且可以通过仪表板查看图像文件。我还可以通过编程方式下载文件并将文件内容放入 UIImage 中。我将仔细检查这一点,并在明天编写一个小代码 sn-p 来验证此功能。 关于您的上次更新。我同意 - 这种行为并不完全清楚。它看起来更像是 iOS 中的手动内存管理。上传文件时,会创建一个类内容的对象,并将引用计数加1。如果将此对象的blobID设置为user.blob_id,则相当于调用retain object content。在删除对象内容的过程中调用release方法,如果是则其引用计数不为0,则返回错误。 quickblox.com/developers/Content#Delete_file 我认为应该添加到将 blobID any 设置为 user.blob_id 的文档中增加此 blob 中的引用计数。并且只需做一个错误描述,当您尝试删除 blob 时会返回该错误描述,提供更多信息。 感谢@glebus 的参考链接。是的,这表明引用计数不为零会拒绝用户删除内容文件。我今天已经进行了更改,但还没有时间验证更改,因此我将在周一完成验证后接受此决议。 确认 2013 年 12 月 16 日:问题已解决。删除内容文件的唯一方法是删除引用,这意味着对于这个特定问题,我必须将用户的 blobID 设置为 0,然后在删除 blob 内容文件后更新用户对象。现在可以了!感谢@glebus 的咨询!以上是关于Quickblox:删除内容项(图片文件/blob)时出现问题的主要内容,如果未能解决你的问题,请参考以下文章