在iOS中保存和查看文件

时间:2019-02-12 13:30:43

标签: ios objective-c

我正在从服务器获取base64编码的文件内容。然后我将数据写入文件。之后,我检查该文件是否为空,这意味着数据已成功写入文件。但是,当我尝试呈现此文件时,我得到的只是一个空视图。那我在做什么错? enter image description here

[f getFile:^(NSString * _Nonnull string) {
                NSString *docsDir;
                NSArray *dirPaths;
                NSData *content = [string dataUsingEncoding:NSUTF8StringEncoding];
                dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                docsDir = [dirPaths objectAtIndex:0];
                NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"hill.jpg"]];
               [content writeToFile:databasePath atomically:YES];
                if ([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
                 NSURL *url = [NSURL fileURLWithPath:databasePath];
                UIDocumentInteractionController *documentInteractionController =[UIDocumentInteractionController interactionControllerWithURL:url];
                 documentInteractionController.delegate = self;
                 [documentInteractionController presentPreviewAnimated:YES];
                }
        } Error:^(NSString * _Nonnull errorMessage) {

      }];

3 个答案:

答案 0 :(得分:0)

编辑了代码段,请尝试

[f getFile:^(NSString * _Nonnull string) {
                NSString *docsDir;
                NSArray *dirPaths;
                NSData *content = [[NSData alloc] initWithBase64EncodedString: string options:0];
                dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                docsDir = [dirPaths objectAtIndex:0];
                NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"hill.jpg"]];
               [content writeToFile:databasePath atomically:YES];
                if ([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
                 NSURL *url = [NSURL fileURLWithPath:databasePath];
                UIDocumentInteractionController *documentInteractionController =[UIDocumentInteractionController interactionControllerWithURL:url];
                 documentInteractionController.delegate = self;
                 [documentInteractionController presentPreviewAnimated:YES];
                }
        } Error:^(NSString * _Nonnull errorMessage) {

      }];

答案 1 :(得分:0)

从您的代码中,我看到您将字符串保存到图像文件(hill.jpg)中。 UIDocumentInteractionController根据扩展名读取文件,因此他们无法读取此文件。我认为,如果将文件名更改为hill.txt,则代码可以正常工作。希望这会有所帮助。

答案 2 :(得分:0)

正如您所说,从服务器获取的内容是base64编码的,因此您需要对其进行解码。

NSData *imageContent = [[NSData alloc] initWithBase64EncodedString:string options:kNilOptions];
if (imageContent) {
    // save to file
}