Ошибка загрузки файла AFNetworking Ошибка Домен =NSCocoaErrorDomain Код =260
Я использую AFNetworking 3.0.4 для загрузки видеофайлов и их отчетов о проделанной работе. Кажется, что файл успешно загружается, но когда я сохраняю этот файл и пытаюсь получить атрибуты файла, он выдает мне следующую ошибку.
Error Domain=NSCocoaErrorDomain Code=260 "The file “7598-Y2TKGNGSEG93SIT.mp4” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/919E2138-6327-4651-89A2-FCA951FDC128/Documents/video/7598-Y2TKGNGSEG93SIT.mp4, NSUnderlyingError=0x15e995970 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
Я использую эту строку, чтобы получить атрибуты файла.
NSError *fileError;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[filePath absoluteString] error:&fileError];
Здесь словарь fileAttributes равен нулю, и он дает мне вышеуказанную ошибку в переменной fileError.
Вот мой полный код
- (void)downloadFile:(MyObject *)myObj progress:(void (^)(float))progress success:(void (^)(NSString *filename))success failure:(void (^)())failure {
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString: myObj.downloadUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"Completed : %f", downloadProgress.fractionCompleted);
dispatch_async(dispatch_get_main_queue(), ^{
[self progressBlocksForUrl: myObj.archiveUrl withProgress:downloadProgress.fractionCompleted];
});
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
NSLog(@"Destination");
NSURL *url = [NSURL URLWithString:myObj.archiveUrl];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *videoPath = [NSString stringWithFormat:@"/%@/%@", @"video", [url lastPathComponent]];
NSString *fullPath = [[paths firstObject] stringByAppendingPathComponent:videoPath];
return [NSURL URLWithString:fullPath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
NSHTTPURLResponse * myresponse = (NSHTTPURLResponse *)response;
NSLog(@"Video downloaded, headers: %@", [myresponse.allHeaderFields description]);
if(error) {
NSLog(@"Error downloading video from %@: %@", myObj.archiveUrl, [error description]);
[self failureBlockForUrl:myObj.archiveUrl];
} else{
NSError *fileError;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[filePath absoluteString] error:&fileError];
if (fileError) {
NSLog(@"ERR: %@", [fileError description]);
[self failureBlockForUrl:myObj.archiveUrl];
} else {
NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
long long fileSize = [fileSizeNumber longLongValue];
NSLog(@"File %@ with size %lld downloaded!", filePath, fileSize);
[self completionBlocksForUrl:myObj.archiveUrl withFilename:[filePath absoluteString]];
}
}
}];
[downloadTask resume];
}
Может ли какое-нибудь тело, пожалуйста, подскажите мне, что я делаю здесь неправильно. Любая помощь будет высоко оценена. Спасибо
1 ответ
Есть два вида URL.
file:///Users/xxx/Library/Developer/
/Users/xxx/Library/Developer/
,
Когда вы устанавливаете URL для хранения загруженного файла, вы должны использовать первый. Когда вы получите его обратно с диска NSFileManager
, вы должны использовать второй. Поэтому внесите следующие изменения.
return [NSURL fileURLWithPath:fullPath];
[[NSFileManager defaultManager] attributesOfItemAtPath:[filePath path] error:&fileError];