在iOS中上传之前如何检查PDF大小?

问题描述

我需要上传不超过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中,然后使用所获得的任何数字进行比较,这很有用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...