如何使用Chokidar?求实现视频自动上传至Cloudinary的正确代码
Chokidar + Cloudinary 自动视频上传实现代码示例
1. 先安装依赖
npm install chokidar cloudinary fs-extra
2. 完整实现代码
const chokidar = require('chokidar'); const cloudinary = require('cloudinary').v2; const fs = require('fs-extra'); // 配置Cloudinary(替换成你自己的凭证) cloudinary.config({ cloud_name: 'YOUR_CLOUD_NAME', api_key: 'YOUR_API_KEY', api_secret: 'YOUR_API_SECRET' }); // 要监听的本地目录(替换成你的视频目录) const WATCH_DIR = './local-videos'; // 已上传文件记录,避免重复上传 const uploadedFiles = new Set(); // 初始化监听 const watcher = chokidar.watch(WATCH_DIR, { ignored: /^\./, // 忽略隐藏文件 persistent: true, awaitWriteFinish: { stabilityThreshold: 2000, // 等待文件写入完成(避免上传未写完的文件) pollInterval: 100 } }); // 处理文件添加事件 watcher.on('add', async (filePath) => { // 只处理视频文件(可根据需要扩展格式) const videoExtensions = ['.mp4', '.mov', '.avi', '.flv', '.wmv']; const ext = filePath.toLowerCase().slice(filePath.lastIndexOf('.')); if (!videoExtensions.includes(ext)) return; // 避免重复上传 if (uploadedFiles.has(filePath)) return; uploadedFiles.add(filePath); try { console.log(`开始上传: ${filePath}`); // 上传到Cloudinary const result = await cloudinary.uploader.upload(filePath, { resource_type: 'video', // 指定资源类型为视频 folder: 'auto-uploaded-videos', // 可选:指定Cloudinary中的文件夹 use_filename: true, // 使用原文件名 unique_filename: false, // 不自动添加唯一后缀(如果需要重复文件名覆盖可设为true) overwrite: false // 不覆盖已存在文件 }); console.log(`上传成功: ${result.secure_url}`); // 可选:上传后删除本地文件 // await fs.remove(filePath); } catch (error) { console.error(`上传失败 ${filePath}:`, error.message); // 移除记录,方便重试 uploadedFiles.delete(filePath); } }); // 监听错误 watcher.on('error', (error) => { console.error('监听错误:', error); }); console.log(`开始监听目录: ${WATCH_DIR}`);
关键注意事项
- 确保Cloudinary凭证正确,权限足够上传视频资源
awaitWriteFinish参数很重要,避免上传还在写入的不完整视频文件- 可以根据需求调整视频格式白名单、上传后的本地文件处理逻辑
- 如果需要支持大文件上传,可添加
chunk_size参数到Cloudinary上传配置中
内容的提问来源于stack exchange,提问作者Naruto
相关产品推荐
相关产品推荐

