使用ALAsset库上传文件到Dropbox时无法使用Dropbox API上传。

4

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

//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?..."

我已经为该应用程序启用了位置服务,并且也能够列出所有的资产。

上传调用会在日志中抛出错误:"[WARNING] DropboxSDK: File does not exist (assets-library://asset/asset.PNG?id=5DC234C1-B27E-45E2-BE61-46E9A266C818&ext=PNG)"。

uploadFileFailedWithError函数会以错误形式被调用 - ("Error Domain=dropbox.com Code=1001 "The operation couldn’t be completed. (dropbox.com error 1001.")

我发送的uploadFile调用有什么问题吗,特别是"from"路径??任何帮助将不胜感激。

2个回答

6

你只能得到一个引用,而不是有效的文件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,它可以保持大小并且同样适用于视频。 - hwaxxer

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接