如何在react-native-video中实现缓存

时间:2017-05-20 19:39:10

标签: react-native

我们如何在react-native-video中实施缓存?基本上,当视频当前从网络资源流式传输时,我们如何在某处保存视频,然后在访问相同资源时检索它。对此最好的方法是什么?

1 个答案:

答案 0 :(得分:5)

我推荐你的最佳方法是使用react-native-fetch-blob,你可以像这样实现它:

const RNFetchBlob = require('react-native-fetch-blob').default;

const {
    fs
} = RNFetchBlob;

const baseCacheDir = fs.dirs.CacheDir + '/videocache';

//call the downloadVideo function
  downloadVideo('http://....',baseCacheDir) 
//Function to download a file..
const activeDownloads = {};
function downloadVideo(fromUrl, toFile) {
    // use toFile as the key
        activeDownloads[toFile] = new Promise((resolve, reject) => {
            RNFetchBlob
                .config({path: toFile})
                .fetch('GET', fromUrl)
                .then(res => {
                    if (Math.floor(res.respInfo.status / 100) !== 2) {
                        throw new Error('Failed to successfully download video');
                    }
                    resolve(toFile);
                })
                .catch(err => {
                    return deleteFile(toFile)
                        .then(() => reject(err));
                })
                .finally(() => {
                    // cleanup
                    delete activeDownloads[toFile];
                });
        });
    return activeDownloads[toFile];
}

//To delete a file..

function deleteFile(filePath) {
    return fs.stat(filePath)
        .then(res => res && res.type === 'file')
        .then(exists => exists && fs.unlink(filePath)) //if file exist
        .catch((err) => {
            // swallow error to always resolve
        });
}

干杯:)