-
iOS WKWebView 파일 다운로드 및 파일 미리보기 (Objective-C)iOS 2022. 4. 10. 09:22반응형
웹에서 파일 다운로드 url(pdf)이 넘어오면 파일을 다운받고, 미리보기로 보여주는 기능을 구현했다.
내가 받는 url는 이런 형태로 되어 있다.
https://홈페이지주소/download.do?…&fileNm=%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%A6%84.pdf
저 fileNm의 뒷부분을 utf-8로 디코딩 해보면 '파일이름.pdf'로 나오는데,
이걸 파일 이름으로 저장할 때 사용하기 위해 아래 링크를 참고했다.
여기서 key값을 [paramDic valueForKey:@"fileNm"]으로 수정해서 디코딩 하는 부분을 구현했다.
전체 코드는 다음과 같다.
- (void)downloadFile{ NSString* fileName = [self parseURL]; NSLog(@"파일 저장 시작. 저장될 파일 이름 : %@",fileName); NSFileManager* fm = [NSFileManager defaultManager]; NSString* documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString* filePath = [documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@", fileName]]; NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileUrl]]; if([fm createFileAtPath:filePath contents:data attributes:nil]==NO){ NSLog(@"%@에 파일 저장 실패",documentDir); [self showToast:@"파일 저장에 실패했습니다."]; } else{ NSLog(@"%@에 파일 저장 성공",documentDir); [self showToast:@"파일이 기기에 저장되었습니다."]; [self openFile:filePath]; } }
parseURL 메소드가 위에서 구현한 디코딩 메소드다.
url에서 파일 이름 부분(fileNm)을 찾아내 디코딩 한 후 리턴한다.
파일을 저장하고 나면 파일 저장에 성공했다는 메시지를 toast 메시지를 띄워 보여주었다.
이 부분은 UIDocumentInteractionController를 이용해서 다운로드한 파일을 미리 보여주는 부분이다.
- (void)openFile:(NSString*)filePath{ UIDocumentInteractionController* udc = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]]; udc.delegate = self; [udc presentPreviewAnimated:true]; } // UIDocumentInteractionController Delegate - (UIViewController*)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController*) controller { return self; }
이렇게 preview로 사용할 때는 아래 delegate를 설정하는 부분을 꼭 작성해줘야 한다..
안 할 경우 이런 메시지가 찍히면서 창이 열리지 않는다.
[ShareSheet] ERROR: UIDocumentInteractionController delegate must implement documentInteractionControllerViewControllerForPreview: to allow preview
정상 동작할 경우 이렇게 미리보기가 나타난다.
반응형'iOS' 카테고리의 다른 글
Invalid Provisioning Profile Signature (Error 90165) (0) 2022.04.13 TestFlight 내부 테스터 추가 안 되는 문제 (No Builds Available) (0) 2022.04.13 iOS Firebase 푸시 알림이 안 오는 문제 (didFailToRegisterForRemoteNotificationsWithError null) (0) 2022.04.10 M1 환경에서 발생하는 pod install error 해결 (0) 2022.04.10