【发布时间】:2014-04-08 22:21:30
【问题描述】:
我正在使用 DropboxSDK(核心 API)。我用这个功能上传文件:
- (void)uploadFile {
[[self restClient] loadMetadata:@"/MyFolder"];
}
- (void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata {
if (metadata.isDirectory) {
if (metadata.contents.count == 0) {
NSString *filename = @"File.txt";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:filename];
NSString *destDir = @"/MyFolder";
[[self restClient] uploadFile:filename toPath:destDir withParentRev:nil fromPath:databasePath];
} else {
for (DBMetadata *file in metadata.contents) {
[self overwriteFile:metadata];
}
}
}
}
我尝试用这个函数覆盖文件“File.txt”,但它不起作用。
- (void)overwriteFile:(DBMetadata*)meta {
NSString *filename = @"File.txt";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:filename];
[[self restClient] uploadFile:filename toPath:meta.path withParentRev:meta.rev fromPath:databasePath];
}
调用此委托:
- (void)restClient:(DBRestClient *)client uploadedFile:(NSString *)destPath from:(NSString *)srcPath metadata:(DBMetadata *)metadata {
NSLog(@"File uploaded successfully to path: %@", metadata.path);
}
我在日志中显示: 文件成功上传到路径:/myfolder/File.txt。然后我去 Dropbox,我看到,我的文件日期没有改变。
我做错了什么?你能帮帮我吗?
【问题讨论】:
-
“它不起作用”是什么意思?您是否收到异常、来自 Dropbox SDK 的任何错误消息或其他什么?
-
@Romain 我已经更新了我的问题。
-
您是否尝试将您尝试上传的文件的内容打印到控制台,以确保它是“新文件”,而不是您再次上传的同一个文件?
-
@Romain 是的,我做到了。我已更改文件并尝试再次上传,但未在 Dropbox 上更新。
-
这可能不是问题,但你为什么要在
-(void)restClient:loadedMetadata:中进行for循环?这样看来,您似乎正在用您的File.txt覆盖/MyFolder文件夹中的所有文件。另外,尝试NSLog从回调中获得的所有内容,包括destPath和srcPath变量,以检查所有内容是否一致。最后,你是否设置了一个回调以防出错?像这样:- (void)restClient:(DBRestClient *)client uploadFileFailedWithError:(NSError *)error。如果你这样做了,我可以肯定地猜到它从来没有被调用过,否则你会说的......
标签: ios objective-c dropbox-api overwrite core-api