问题描述
我需要上传不超过2 MB的PDF文件。现在,我正在使用UIDocumentPickerViewController
浏览PDF文件。有什么方法可以检查PDF的大小是否大于2 MB?我可以使用NSByteCountFormatter
来获取尺寸。代码如下:
NSData *fileData = [NSData dataWithContentsOfURL:url];
NSLog(@"Byte Length%@",[[NSByteCountFormatter new] stringFromByteCount:fileData.length]);
Nsstring *twoMB = [[NSByteCountFormatter new] stringFromByteCount:fileData.length];
Nsstring *allowedmem = @"2 MB";
if (twoMB > allowedmem) {
NSLog(@"Greater than 2 MB");
} else {
ViewMyPDFViewController *webview = [[ViewMyPDFViewController alloc]init];
webview.productURL = url;
[self presentViewController:webview animated:YES completion:nil];
}
我已经尝试了这段代码,但是在if
条件下无法正常工作。请告诉我我做错了。如何检查它是否大于2 MB?
解决方法
您正在if
条件内比较此表达式中的两个字符串:
twoMB > allowedmem
这是按字母比较而不是数字比较。在某些情况下,无论如何这可能都会为您提供正确的结果(例如“ 3 MB”>“ 2 MB” => true
),但在许多情况下却不会(例如“ 300 kB”>“ 2 MB “ => true
)。
您不需要NSByteCountFormatter
,因为您已经有字节数。只需检查字节数是否超过2 MB。例如,将其与2E6
进行比较:
NSData *fileData = [NSData dataWithContentsOfURL:url];
NSUInteger pdfBytes = fileData.length;
NSUInteger allowedBytes = 2e6; // 2 MB is 2 million bytes,or 2 x 10 ^ 6
if (pdfBytes > allowedBytes) {
NSLog(@"Greater than 2 MB");
} else {
ViewMyPDFViewController *webview = [[ViewMyPDFViewController alloc]init];
webview.productURL = url;
[self presentViewController:webview animated:YES completion:nil];
}
请注意,这些上下文通常使用二进制系统,因此,如果要更精确一点,则2 MB实际上是2,097,152字节。正如您所显示的,有很多健壮的比较方法涉及格式化程序,但是无论使用哪种方法,都应谨慎进行数字而不是字母比较。您可能还会发现创建一个文件大小为2 MB的文件,然后将其加载到.length
中,然后使用所获得的任何数字进行比较,这很有用。