如何判断文件是不是已通过 NSFileManager ios 上传
Posted
技术标签:
【中文标题】如何判断文件是不是已通过 NSFileManager ios 上传【英文标题】:How to tell if a file has been uploaded through NSFileManager ios如何判断文件是否已通过 NSFileManager ios 上传 【发布时间】:2015-04-17 17:52:08 【问题描述】:我正在将文件上传到 Dropbox,我想知道是否可以通过 NSFileManager 标记任何内容以测试文件是否已上传。我一直在梳理文档,但还没有找到任何有用的东西。
例如,如果我上传了一个名为 song.m4a 的文件,并且用户在应用程序中更改了该文件的名称,我将如何确定该文件是否已使用新名称上传以免文件再次上传?
是否可以设置任何属性或属性来查看文件是否已上传?
谢谢。
【问题讨论】:
【参考方案1】:您可以使用散列,例如您可以计算文件的MD5哈希并将其存储在手机上的本地文件中,当用户尝试上传文件时,您无需检查其名称,您只需重新计算MD5哈希并检查它是否存在于您的本地文件,如果有,则之前上传过一次。
编辑:
您可以将任何内容转换为 NSData,然后计算该 NSData 的哈希值,例如在您的情况下,您可以像这样加载文件
NSData* data = [NSData dataWithContentsOfFile:yourFilePath];
然后你可以像这样散列它
- (NSString*)MD5:(NSData*)input
// Create byte array of unsigned chars
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
// Create 16 byte MD5 hash value, store in buffer
CC_MD5(input.bytes, input.length, md5Buffer);
// Convert unsigned char buffer to NSString of hex values
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x",md5Buffer[i]];
return output;
别忘了导入
#import <CommonCrypto/CommonDigest.h>
【讨论】:
我查看了散列的示例,我想知道,是否需要使用 NSString 来计算散列?还是 NSData?还是会有所作为?我不熟悉散列,我想知道用户通过重命名文件来更改 NSString 是否会更改散列计算。原谅我的无知。 您可以从 NSString 或 NSData 计算哈希,所有数据都可以转换为 NSData,因为所有数据都是字节,我将编辑我的答案,请检查它以上是关于如何判断文件是不是已通过 NSFileManager ios 上传的主要内容,如果未能解决你的问题,请参考以下文章