2017-02-14 3 views
0

Этот код работает и сохраняет загруженный файл в кадр камеры, если файл является изображением, но он не сохраняет его, когда это видеофайл.доступ к видео внутри .tmp

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { 

    NSData * data = [NSData dataWithContentsOfURL:location]; 
    UIImage * image = [UIImage imageWithData:data]; 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 
    UISaveVideoAtPathToSavedPhotosAlbum(location.path, self, @selector(video:didFinishSavingWithError: contextInfo:), nil); 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.ProgressView setHidden:NO]; 
    }); 

} 

, когда я получаю путь загруженного файла это временный файл, как это:

/частный/вар/мобильный/Контейнеры/Data/Application/DE97D98D-760F-48DC-AFBB- C61C5E3185A0/TMP/CFNetworkDownload_5DOCCe.tmp

, и я думаю, что с тех пор UISaveVideoAtPathToSavedPhotosAlbum хочет путь целевого видео, чтобы сохранить причину он не работает в том, что он не может получить доступ к видео файла внутри .tmp

, пожалуйста, помогите! это было довольно долго, я борюсь с этим.

+1

Взгляните на это: http://stackoverflow.com/a/26666813/4237142 –

+0

спасибо, проверяется и обновляется вопрос. – Light

ответ

0

Я нашел решение:

NSData * data = [NSData dataWithContentsOfURL:location]; 
[[NSFileManager defaultManager] moveItemAtURL:location toURL:[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] error:nil]; 
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * documentsDirectory = [paths objectAtIndex:0]; 
    NSString * FilePath = [documentsDirectory stringByAppendingPathComponent:jsonTitle]; 
    [data writeToFile:FilePath atomically:YES]; 

    if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(FilePath)) { 

     UISaveVideoAtPathToSavedPhotosAlbum(FilePath, nil, nil, nil); 
    } else { 
     NSLog(@"error"); 
    } 

    NSFileManager * removeDownloadAfterSave; 
    [removeDownloadAfterSave removeItemAtPath:FilePath error:nil]; 
0

попытаться использовать ALAssestsLibrary

@property (сильный, неатомической) ALAssetsLibrary * библиотека;

NSURL *videoURL = [NSURL URLWithString:videoURLString]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSURLRequest *request = [NSURLRequest requestWithURL:videoURL]; 
     AFURLConnectionOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
     NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:videoName]; 
     operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO]; 
     [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 
      NSLog(@"downloadComplete! is %f", (float)totalBytesRead/totalBytesExpectedToRead); 
     }]; 
     [operation setCompletionBlock:^{ 
      NSLog(@"downloadComplete!"); 

      [self.library writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:filePath] completionBlock:^(NSURL *assetURL, NSError *error) { 
       if (error) { 
        NSLog(@"%@", error.description); 
       } 
       else { 
        NSLog(@"Done :)"); 
        NSString *fileDownloadStatus = [NSString stringWithFormat:@"Downloading of %@ Finished", videoName]; 
        [SVProgressHUD showImage:[UIImage imageNamed:@"Mp4_Icon"] status:fileDownloadStatus]; 
       } 
      }]; 
     }]; 
     [operation start]; 
    }); 
+0

спасибо, теперь я могу получить доступ к видео и иметь формат mp4, но ** UIVideoAtPathIsCompatibleWithSavedPhotosAlbum ** считает, что он несовместим с рулоном камеры – Light

+0

, он совместим с рулоном камеры –

Смежные вопросы