Загрузка файла из API-маршрутов Далее JS не работает - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь загрузить файл на свой сервер, что я успешно могу сделать с моим кодом, но я получаю от него консольный вывод:

API разрешен без отправки ответ на / api / upload, это может привести к зависанию запросов.

Файл успешно помещен в папку.

Я не совсем понимаю, как я не отправив ответ, как мне я.

Что я делаю не так?

Вот мой код формы:

const axios = require("axios").default;

class VideoUploadForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      file: null,
      uploaded: false
    };
  }

  onChangeHandler = event => {
    this.setState({
      selectedFile: event.target.files[0],
      loaded: 0
    });
  };

  onClickHandler = () => {
    const data = new FormData();
    data.append("video", this.state.selectedFile);
    axios
      .post("/api/upload", data, {
        headers: {
          "Content-Type": "multipart/form-data"
        }
      })
      .then(function(response) {
        console.log(response);
      })
      .catch(function(error) {
        console.log(error);
      });
  };

  render() {
    return (
      <div>
        <form
          action="#"
          method="post"
          encType="multipart/form-data"
          target="transFrame"
        >
          <input type="file" name="video" onChange={this.onChangeHandler} />
          <button onClick={this.onClickHandler}>upload</button>
        </form>
        <iframe
          width="200"
          height="100"
          name="transFrame"
          id="transFrame"
        ></iframe>
      </div>
    );
  }
}

export default VideoUploadForm;

и API

import multer from "multer";

export const config = {
  api: {
    bodyParser: false
  }
};

var storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, "public");
  },
  filename: function(req, file, cb) {
    cb(null, "video.mp4");
  }
});

var upload = multer({ storage: storage });

export default async (req, res) => {
  upload.single("video")(req, {}, err => {
    res.send(req.file.path);
    res.end();
    console.log(req.file); // do something with the file
  });
};

1 Ответ

0 голосов
/ 14 марта 2020

Вот в чем проблема:

res.send(req.file.path);
res.end();

res.send неявно вызывает res.write с последующим res.end. Вы должны удалить второй res.end.

...