使用express和multer上传文件后如何下载?

Phi*_*hil 7 javascript mongoose node.js express multer

我已经filesystem使用multer

我的服务器是node,客户端是react.

我在客户端下载和显示保存的文件时遇到问题 react

每当我这样做时,res.download(file)都会因为客户端拒绝连接而引发错误。

我的代码如下:

用户上传映射.js

const mongoose = require("mongoose");

const UserToUploadMapping = new mongoose.Schema({
  userId: {
      type:String,
      required:true
  },
  file: {
    type: Object,
    required: true,
  },
  date: {
    type: Date,
    default: Date.now,
  },
});

module.exports = mongoose.model("UserToUploadMapping", UserToUploadMapping);
Run Code Online (Sandbox Code Playgroud)

上传视频.js

const router = require("express").Router();
const multer = require('multer');
const UserToUploadMapping = require('../models/UserToUploadMapping')

let nameFile = ''
const storage = multer.diskStorage({
    destination:'./Videos',
    filename:(req,file,cb) => {
        console.log(file)
        nameFile = file.originalname + " "+ Date.now()
        cb(null, nameFile)
    }
})

const upload = multer({storage:storage})

router.post('/upload', upload.single('video'), async (req,res,next) => {
    console.log("object")
    const saveMapping = new UserToUploadMapping({
        userId:'123',
        file:req.file,
    })

    await saveMapping.save()

    res.send("Video uploaded")
})

router.get('/download', async(req,res,next) => {
    const x = await UserToUploadMapping.find()
    // res.send(x)
    res.download(x[0].path)
})

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

客户

const fetchVideo = async () => {
  
    const resp = await axios.get(
      "http://localhost:5000/api/user/video/download"
    );
    console.log(resp)
  };

  return (
    <>
      <NavContainer />
      <div className={classes.Post}>
        <Input
          type="file"
          onChange={(e) => uploadVideos(e.target.files)}
          accept="video/mp4"
        />
        {/* <Button onClick={(e) => submitHandler(e)}>Upload</Button> */}
        <video></video>
      </div>
    </>
  );
Run Code Online (Sandbox Code Playgroud)

错误

在此处输入图片说明

小智 1

您正在运行 2 个应用程序前端和后端,它们具有不同的端口(3000、5000),因此浏览器会阻止跨域请求。在 Express 上,您必须启用 CORS 以允许来自前端 URL (http://localhost:3000) 的请求。