无法从 React-Node 中的上传文件夹访问图像
Unable to access images from upload folder in React-Node
在我的 MERN 应用程序中,我正在尝试使用 multer 访问已保存在本地数据库中的客户端图像。
我的后端文件夹的结构是这样的:
--- api
--- controllers
--- model
--- routes
--- config
--- db.js
--- appConfig.js
--- utils
--- uploads
--- multerMiddleware.js
--- app.js
图像上传和存储到本地数据库完全正常。创建新数据时,客户端在API响应中收到的数据包含上传图片的URL,以便再次访问(如显示图片缩略图)。
我的代码是这样的:
App.js
const express = require("express");
const path = require('path');
const app = express();
const directory = path.join(__dirname, '/uploads');
app.use('/uploads', express.static(directory));
require("./config/db/db")();
require("./config/appRoutes/appRoutes")(app);
module.exports = app;
multerFile.js
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/uploads')
},
filename: function (req, file, cb) {
const fileName = file.originalname.toLowerCase().split(' ').join('-');
cb(null, fileName);
}
});
const upload = multer({
storage
});
module.exports = upload;
控制器
exports.createService = async (req, res) => {
const service_name = req.body.main_name;
const url = req.protocol + '://' + req.get('host');
let service_pic;
if (req.file) {
service_pic = url + '/utils/uploads/' + req.file.filename;
}
try {
const service = new Services({
_id: new mongoose.Types.ObjectId(),
service_name,
service_pic
});
const new_service = await service.save();
res.status(201).json({ message: "New data created", result: new_service });
} catch (error) {
console.log(error);
res.status(500).json({ message: "Internal server error", error });
}
}
通过路线 http://localhost:5000/services/all
,我得到的 JSON 数据为:
{
createdAt: "2020-09-07T08:25:11.581Z"
service_name: "TEST"
service_pic: "http://localhost:5000/utils/uploads/testio-logo-rgb1.png"
updatedAt: "2020-09-07T08:25:11.581Z"
}
当我尝试访问 http://localhost:5000/utils/uploads/testio-logo-rgb1.png
时,它总是 returns 错误:"error":{"message":"Route Not found"}}
。图像已正确存储到 /uploads
文件夹中,但仍无法在客户端上访问。
我不确定出了什么问题。感谢任何解决此问题的帮助。
我认为您的 URL 不正确,
http://localhost:5000/utils/uploads/testio-logo-rgb1.png
应该是
http://localhost:5000/uploads/testio-logo-rgb1.png
将'/uploads'
更改为'utils/uploads'
// app.js
const directory = path.join(__dirname, 'utils/uploads');
app.use('/uploads', express.static(directory));
此代码块表示:您已在 /uploads
设置了 static-assets 服务端点。每次请求到达此端点时,您的服务器都会查找文件夹 /utils/uploads
.
一个示例请求是:http://localhost:5000/uploads/testio-logo-rgb1.png
在我的 MERN 应用程序中,我正在尝试使用 multer 访问已保存在本地数据库中的客户端图像。 我的后端文件夹的结构是这样的:
--- api
--- controllers
--- model
--- routes
--- config
--- db.js
--- appConfig.js
--- utils
--- uploads
--- multerMiddleware.js
--- app.js
图像上传和存储到本地数据库完全正常。创建新数据时,客户端在API响应中收到的数据包含上传图片的URL,以便再次访问(如显示图片缩略图)。
我的代码是这样的:
App.js
const express = require("express");
const path = require('path');
const app = express();
const directory = path.join(__dirname, '/uploads');
app.use('/uploads', express.static(directory));
require("./config/db/db")();
require("./config/appRoutes/appRoutes")(app);
module.exports = app;
multerFile.js
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/uploads')
},
filename: function (req, file, cb) {
const fileName = file.originalname.toLowerCase().split(' ').join('-');
cb(null, fileName);
}
});
const upload = multer({
storage
});
module.exports = upload;
控制器
exports.createService = async (req, res) => {
const service_name = req.body.main_name;
const url = req.protocol + '://' + req.get('host');
let service_pic;
if (req.file) {
service_pic = url + '/utils/uploads/' + req.file.filename;
}
try {
const service = new Services({
_id: new mongoose.Types.ObjectId(),
service_name,
service_pic
});
const new_service = await service.save();
res.status(201).json({ message: "New data created", result: new_service });
} catch (error) {
console.log(error);
res.status(500).json({ message: "Internal server error", error });
}
}
通过路线 http://localhost:5000/services/all
,我得到的 JSON 数据为:
{
createdAt: "2020-09-07T08:25:11.581Z"
service_name: "TEST"
service_pic: "http://localhost:5000/utils/uploads/testio-logo-rgb1.png"
updatedAt: "2020-09-07T08:25:11.581Z"
}
当我尝试访问 http://localhost:5000/utils/uploads/testio-logo-rgb1.png
时,它总是 returns 错误:"error":{"message":"Route Not found"}}
。图像已正确存储到 /uploads
文件夹中,但仍无法在客户端上访问。
我不确定出了什么问题。感谢任何解决此问题的帮助。
我认为您的 URL 不正确,
http://localhost:5000/utils/uploads/testio-logo-rgb1.png
应该是
http://localhost:5000/uploads/testio-logo-rgb1.png
将'/uploads'
更改为'utils/uploads'
// app.js
const directory = path.join(__dirname, 'utils/uploads');
app.use('/uploads', express.static(directory));
此代码块表示:您已在 /uploads
设置了 static-assets 服务端点。每次请求到达此端点时,您的服务器都会查找文件夹 /utils/uploads
.
一个示例请求是:http://localhost:5000/uploads/testio-logo-rgb1.png