Возникает ошибка. Невозможно открыть файл, потому что такого файла нет для существующего файла.

Я использую rn-fetch-blob 0.10.8 с RN 0.49 на iOS с симулятором iPhone 6.

Я использую модуль response-native-image-resizer для изменения размера изображения, а затем использую response-native-fetch-blob, чтобы переместить это изображение в нужное место. Однако при этом я получаю сообщение об ошибке:

Не удалось открыть файл «6492238E-AAAC-4DC6-90F3-AFAB7225DBD5.jpg», поскольку такого файла нет.

Перед копированием я печатаю на консоли источник и место назначения:

"Перемещение файла: /// Users / laurent / Library / Developer / CoreSimulator / Devices / 3AF6C788-B6ED-41DD-85F0-32D719DB0DBE / data / Containers / Data / Application / A401D341-9C60-4AA3-8D8F-69207A8C9454 / Library / Caches /6492238E-AAAC-4DC6-90F3-AFAB7225DBD5.jpg => / Users / laurent / Library / Developer / CoreSimulator / Devices / 3AF6C788-B6ED-41DD-85F0-32D719DB0DBE / data / Containers / Data / Application3-9-4DA34A -8D8F-69207A8C9454 / Documents / testing.jpg "

Я могу убедиться, что путь //Users/laurent/Library/Developer/CoreSimulator/Devices/3AF6C788-B6ED-41DD-85F0-32D719DB0DBE/data/Containers/Data/Application/A401D341-9C60-4AA3-8D8F-69207A8C9454/Library/Caches/6492238E-AAAC-4DC6-90F3-AFAB7225DBD5.jpg существует, поскольку могу открыть его в Finder. Однако по какой-то причине rn-fetch-blob его не находит.

Есть идеи, в чем может быть проблема?

Для информации это код, который я использую:

const resizedImage = await ImageResizer.createResizedImage(localFilePath, dimensions.width, dimensions.height, format, 85);
const resizedImagePath = resizedImage.uri;
console.info('Moving ' + resizedImagePath + ' => ' + targetPath);
await RNFetchBlob.fs.cp(resizedImagePath, targetPath); // Throws error

person laurent    schedule 19.11.2017    source источник


Ответы (1)


Проблема в том, что этот путь недоступен из JavaScript, вам нужно сначала сохранить его в допустимом месте, например в папке приложения temp, а затем передать URL-адрес папки temp. Вот как вы сохраняете в папку temp на iOS:

+(NSURL*)saveToTmpFolder:(NSData*)data {
    NSString *temporaryFileName = [NSProcessInfo processInfo].globallyUniqueString;
    NSString *temporaryFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[temporaryFileName stringByAppendingPathExtension:@"jpg"]];
    NSURL *temporaryFileURL = [NSURL fileURLWithPath:temporaryFilePath];

    NSError *error = nil;
    [data writeToURL:temporaryFileURL options:NSDataWritingAtomic error:&error];

    if ( error ) {
        //NSLog( @"Error occured while writing image data to a temporary file: %@", error );
    }
    else {
        //NSLog(@"Image Saved - YOU ROCK!");
    }
    return temporaryFileURL;
}

Или, если вам нужен JavaScript API, отличным решением будет react-native-fs.

person gran33    schedule 19.11.2017
comment
Да, я заменил RNFetchBlob.fs.cp(source, target) на RNFS.copyFile(source, target), и это сработало. Я не понимаю, почему один работает, а другой нет, поскольку оба являются собственными модулями? Или это ошибка в RNFetchBlob? В любом случае спасибо за то, что указали мне в правильном направлении. - person laurent; 20.11.2017