无法使用保管箱 API 将文件(使用 ALAsset 库)上传到保管箱

Posted

技术标签:

【中文标题】无法使用保管箱 API 将文件(使用 ALAsset 库)上传到保管箱【英文标题】:Unable to upload files (using ALAsset libraries) to dropbox using the dropbox API 【发布时间】:2012-12-13 16:37:54 【问题描述】:

在我的 ios 应用程序中,我尝试使用 Dropbox 提供的“uploadFile”调用。我正在使用 ALAssetsLibrary 选择以编程方式获得的特定照片/视频作为资产。我需要将该特定资产上传到保管箱。

//ALAsset *asset is the asset i intend to upload
[self.restClient uploadFile:[asset.defaultRepresentation filename] toPath:@"/" withParentRev:nil fromPath:[asset.defaultRepresentation.url absoluteString]];

Dropbox 似乎不喜欢资产承载的路径,看起来像这样:“assets-library://asset/asset.PNG?...”

我已为该应用启用了定位服务,并且还可以列出所有资产。

上传调用引发错误,“[警告] DropboxSDK:文件不存在 (assets-library://asset/asset.PNG?id=5DC234C1-B27E-45E2-BE61-46E9A266C818&ext=PNG)”,在日志。

调用 uploadFileFailedWithError 函数时出现错误 - ("Error Domain=dropbox.com Code=1001 "操作无法完成。(dropbox.com 错误 1001。")

我发送 uploadFile 调用的方式有什么问题吗,尤其是“从”路径?任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

你只得到一个引用,而不是一个有效的文件 url,这对于AssetsLibrary 之外的类是没有用的。但是,您可以很容易地获取资产数据并将其保存到自己的磁盘中:

- (void)writeAsset:(ALAsset *)asset toPath:(NSString *)path

    ALAssetRepresentation *representation = asset.defaultRepresentation;
    long long size = representation.size;
    NSMutableData *rawData = [[NSMutableData alloc] initWithCapacity:size];
    void *buffer = [rawData mutableBytes];
    [representation getBytes:buffer fromOffset:0 length:size error:nil];
    NSData *assetData = [[NSData alloc] initWithBytes:buffer length:size];
    [assetData writeToFile:path atomically:YES];

【讨论】:

@codeToDeath 它保留了大小,也适用于视频。【参考方案2】:

@hwaxxer 的解决方案非常适合小型资产。如果您想存储任何大小的资产并避免内存消耗问题,请查看以下答案:

SO: Get video NSData from ALAsset url iOS

【讨论】:

以上是关于无法使用保管箱 API 将文件(使用 ALAsset 库)上传到保管箱的主要内容,如果未能解决你的问题,请参考以下文章

Dropbox 直接从浏览器上传文件

Dropbox 迁移(API v1 已停用)iOS 目标 c(备份、恢复)

Microsoft Azure 是不是有 REST API 来查看有关备份保管库的信息?

通过 API 访问 OneDrive 个人保管库

vmwaresiterecovery无法显示

其他人上传到我的文件夹的保管箱访问令牌