【问题标题】:How to check the PDF size before uploading in iOS?在 iOS 中上传之前如何检查 PDF 大小?
【发布时间】:2020-12-20 17:07:15
【问题描述】:

我需要上传不超过 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?

【问题讨论】:

    标签: ios objective-c uidocumentpickerviewcontroller


    【解决方案1】:

    您在 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 并使用您获得的任何数字进行比较很有用。

    【讨论】:

    • 谢谢你的想法..你能帮我看看如何检查字节数是否超过 2 MB?
    • 更新了一个完整的例子
    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2019-04-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多