Я пытаюсь сохранить изображения в стиле django, где изображение сохраняется в папке, а путь к файлу возвращается в запросе на получение.
Пока у меня есть следующая модель изображения:
const PictureSchema = new mongoose.Schema(
{
image: {
type: String,
required: true,
},
},
{
timestamps: true,
}
);
module.exports = mongoose.model("Picture", PictureSchema);
И следующие взгляды:
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "data/images");
},
filename: function (req, file, cb) {
cb(null, Date.now() + ".jpg");
},
});
const upload = multer({ storage: storage });
app.post("/upload", upload.single("image"), (req, res) => {
Picture.create({
image: req.file.path,
})
.then((picture) => res.status(201).json(picture))
.catch((err) => res.status(500).json({ error: err.message }));
});
app.get("/", (req, res) => {
Picture.find({}, "-__v")
.then((pictures) => res.status(200).json(pictures))
.catch((err) => res.status(500).json({ error: err.message }));
});
Все работает, файл сохраняется в папку, и когда я извлекаю его, он отображается так:
{
"_id": "5fd0f1d4f81e3f28b0aa70d3",
"image": "data\\images\\1607528916952.jpg",
"createdAt": "2020-12-09T15:48:36.967Z",
"updatedAt": "2020-12-09T15:48:36.967Z",
"__v": 0
}
Но у меня есть экспресс-настройка для обслуживания статического каталога, например:
app.use(express.static("data"));
Как заставить его возвращать экземпляр с относительным путем к полю изображения вместо относительного пути из файловой системы?
Поскольку вы определили каталог data
для статического обслуживания, вам необходимо запросить изображения, используя следующий URL-адрес:
http://<yourHost>:<yourPort>/images/160...44.jpg
Если вы хотите изменить это и указать только имя изображения, вам нужно настроить путь, который вы передаете промежуточному программному обеспечению express.static
:
app.use(express.static("data/images"));
Теперь вы можете запросить изображения, используя следующий URL:
http://<yourHost>:<yourPort>/160...44.jpg