upload.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const fs = require('fs');
  2. const path = require('path');
  3. function registerUploadRoutes(app, deps) {
  4. app.post('/api/upload/video', deps.upload.single('video'), (req, res) => {
  5. try {
  6. if (!req.file) {
  7. return res.status(400).json({ error: '未收到视频文件' });
  8. }
  9. const file = req.file;
  10. const filename = file.filename;
  11. const ext = path.extname(filename).replace('.', '').toLowerCase();
  12. const videoId = `VID-${Date.now()}`;
  13. const fileStat = fs.statSync(file.path);
  14. const videoEntry = {
  15. id: videoId,
  16. title: req.body.title || path.basename(filename, path.extname(filename)),
  17. filename,
  18. size: fileStat.size,
  19. duration: 0,
  20. category: 'uploaded',
  21. tags: req.body.tags ? JSON.parse(req.body.tags) : [],
  22. description: req.body.description || '用户上传的视频',
  23. source: 'uploaded',
  24. metadata: {
  25. resolution: '未知',
  26. format: ext || 'mp4',
  27. },
  28. };
  29. const manifest = deps.readManifest();
  30. manifest.push(videoEntry);
  31. deps.writeManifest(manifest);
  32. console.log(`📤 视频上传成功: ${filename} (${(fileStat.size / 1024 / 1024).toFixed(1)}MB) → ${videoId}`);
  33. res.json({
  34. success: true,
  35. video: videoEntry,
  36. filepath: `/backend/video/${filename}`,
  37. });
  38. } catch (err) {
  39. console.error('❌ 视频上传失败:', err.message);
  40. res.status(500).json({ error: `上传失败: ${err.message}` });
  41. }
  42. });
  43. }
  44. module.exports = { registerUploadRoutes };