Я загружаю то, что может быть большим файлом из ведра S3, и хочу сохранить его между контроллерами представлений, которые будут потребляться через некоторое время. Мне нравится каталог tmp
из-за меньших ограничений на размер файла, и, похоже, для меня это не является причиной сохранения в каталоге Documents.Как скопировать содержимое NSData во временный файл?
Я могу построить путь к tmp
с:
NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"image"] URLByAppendingPathExtension:@"png"];
NSLog(@"fileURL: %@", [fileURL path]);
, но не уверен, как писать/переписывать загруженный NSData *
на этот путь.
я в основном просто хочу, что я могу более четко выразить с помощью командной строки:
wget https://example.com/image.png
cp image.png /tmp/
Похоже ссылки класса может выставить метод, чтобы сделать только это:
EDIT
Мое решение, которое работает. Закончилось то, что мне нужно было использовать writeToURL
. Вдохновение взято отсюда: http://nshipster.com/nstemporarydirectory/ https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/#//apple_ref/occ/clm/NSURL/fileURLWithPath:isDirectory:
#define S3_LATEST_IMAGE_FILEPATH @"test-image.png"
// Write the downloaded result to the filesystem
NSError *error;
NSString *fileName = [NSString stringWithFormat:@"%@_%@", [[NSProcessInfo processInfo] globallyUniqueString], S3_LATEST_IMAGE_FILEPATH];
NSURL *directoryURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]] isDirectory:YES];
[[NSFileManager defaultManager] createDirectoryAtURL:directoryURL withIntermediateDirectories:YES attributes:nil error:&error];
if (error) {
NSLog(@"Error1: %@", error);
return;
}
NSURL *fileURL = [directoryURL URLByAppendingPathComponent:fileName];
NSString *path = fileURL.absoluteString;
NSLog(@"fileURL.absoluteString: %@", path);
[data writeToURL:fileURL options:NSDataWritingAtomic error:&error];
if (error) {
NSLog(@"Error: %@", error);
}
Я получаю сообщение об ошибке: 'Ошибка: Ошибка домена = NSCocoaErrorDomain Code = 4" Файл "image.png" не существует. "UserInfo = {NSFilePath = file: /// private/var/mobile/Containers /Data/Application/809801E6-94AD-4EEA-91D1-6C74155E9396/tmp/image.ping, NSUnderlyingError = 0x146dd6760 {Error Domain = NSPOSIXErrorDomain Code = 2 «Нет такого файла или каталога»}} ' – tarabyte
Если ваш путь содержит все новые каталоги то сначала вы должны создать каталоги, прежде чем писать. Я обновил свой ответ, пожалуйста, проверьте – iPrabu
Хм. Я смотрел на это. Не решает. Файл определенно также создается в корне каталога tmp (нет подкаталоги в пути). – tarabyte