проблема с загрузкой файлов mp4 в несколько node.js

#node.js #express #ffmpeg #multer

#node.js #экспресс #ffmpeg #мультер

Вопрос:

Я пытаюсь загрузить файл mp4 с помощью multer в node.js

(Просмотр)VideoUploadPage.js

 import React, { useState } from "react";
import Axios from "axios";


function VideoUploadPage() {

const onDrop = (files) => {
    let formData = new FormData();
    const config = {
      header: { "content-type": "multipart/form-data" },
    };
    formData.append("file", files[0]);
    console.log(files);

    Axios.post("/api/video/uploadfiles", formData, config).then((response) => {
      if (response.data.success) {
        console.log(response.data);
      } else {
        alert("비디오 업로드를 실패 했습니다.");
      }
    });
  };

}
 

(Сервер)

video.js

 const express = require("express");
const router = express.Router();
const multer = require("multer");
const path = require("path");
const ffmpeg = require("fluent-ffmpeg");



let storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "uploads/");
  },
  filename: (req, file, cb) => {
    cb(null, `${Date.now()}_${file.originalname}`);
  },
  fileFilter: (req, file, cb) => {
    const ext = path.extname(file.originalname);
    if (ext !== ".mp4") {
      return cb(res.status(400).end("only mp4 is allowed"), false);
    }
    cb(null, true);
  },
});

const upload = multer({ storage: storage }).single("file");

router.post("/uploadfiles", (req, res) => {
  upload(req, res, (err) => {
    if (err) {
      return res.json({ success: false, err });
    }
    return res.json({
      success: true,
      url: res.req.file.path,
      fileName: res.req.file.filename,
    });
  });
});
 

При video.js назначение: (запрос, файл, cb) => {
cb(null, «uploads/»)
} <—— Я могу проверить, какой файл будет загружен с помощью console.log(response.data), но в папке «uploads» нет файла mp4.

Когда я изменил «uploads /» на свой путь к локальному каталогу, файл mp4 находится в папке uploads ….

например: «C://~~~/загружает»

Есть идеи?

Ответ №1:

используйте path.resolve(‘./uploads’), чтобы преобразовать последовательность сегментов пути в абсолютный путь.

 let storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, path.resolve('./uploads'); // path of the upload folder
},
filename: (req, file, cb) => {
cb(null, `${Date.now()}_${file.originalname}`);
},
fileFilter: (req, file, cb) => {
const ext = path.extname(file.originalname);
if (ext !== ".mp4") {
  return cb(res.status(400).end("only mp4 is allowed"), false);
}
cb(null, true);
},
});
 

Комментарии:

1. Я уже пробовал это, но это не работает

Ответ №2:

Вы можете использовать path.resolve(process.cwd() ‘путь до папки загрузки’);

например: path.resolve(process.cwd() ‘/uploads’);

Комментарии:

1. Это тоже не работает. Я пробую разные способы

2. «../ uploads» <— это работает, и я пытаюсь понять, почему это работает

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

4. На самом деле это похоже на учебное пособие. Я искал других людей, которые занимались этим, но точно такой же код