Я впервые работаю с Multer / GridFS при использовании стека MERN. Я не вижу никаких ошибок, но по какой-то причине при загрузке изображения коллекция MongoDB по-прежнему показывает поддельный путь.
Соответствующий код с сервера. js Файл
const express = require("express");
const connectDB = require("./config/db");
const multer = require("multer");
const GridFsStorage = require("multer-gridfs-storage");
const Grid = require("gridfs-stream");
const methodOverride = require("method-override");
const path = require("path");
const crypto = require("crypto");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const config = require("config");
const db = config.get("mongoURI");
const app = express();
// Init gfs
let gfs;
// Connect Database
connectDB("open", () => {
// Initialize Stream
gfs = Grid(connectDB().db, mongoose.mongo);
gfs.collection("profiles");
});
// Create Storage Engine
const storage = new GridFsStorage({
db: connectDB(),
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString("hex") + path.extname(file.originalname);
const fileInfo = {
filename: filename,
// Should Match Collection Name
bucketName: "profiles"
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage });
module.exports = upload;
Соответствующий код из файла маршрута
// @route POST api/profile
// @description Create Or Update Current User's Profile
// @access Private
router.post(
"/",
[
auth,
upload.single("profileImage"),
[
(check("archetype", "Archetype Is Required.")
.not()
.isEmpty(),
check("profileImage", "Profile Picture Is Required.")
.not()
.isEmpty())
]
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
Соответствующий код из файла ввода формы
<form
onSubmit={e => onSubmit(e)}
className='form'
enctype='multipart/form-data'
>
<h3>Basic Profile</h3>
<div className='grid-2'>
<div className='form-group'>
<label>Profile Picture</label>
<label htmlFor='file-upload-profile' className='choose-file'>
Upload Image File
</label>
<input
name='profileImage'
id='file-upload-profile'
type='file'
accept='file_extension|image/*|media_type'
// value={profileImage}
onChange={e => onChange(e)}
/>
MongoDB В коллекции профилей показано следующее:
profileImage:"C:\fakepath\Test Image.jpg"
Мысли
Как я уже сказал, в терминале не отображаются ошибки или консоль. Имя входного файла profileImage
, которое я использую в запросе POST.