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)时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 Azure 文件夹中的 blob 文件 [关闭]

Quickblox:上传图片 REST API

从 BLOB 数据库中删除 ComboBox 中的重复项

使用 Azure 在哪里存储用户图片等内容? Blob 存储?

Quickblox 内容与自定义对象文件

如何从用户的 blob id 将照片提供给对话框?