如何使用本机反应将图像上传到 MERN 堆栈中的 MongoDB?
How to upload images to MongoDB in MERN stack using react native?
我正在制作一个应用程序,在我的应用程序中,我试图允许用户将图像上传到数据库。对于这个应用程序,我使用的是 MERN(使用本机反应,而不是反应)。我有一个将图像上传到数据库的路由,以及一个调用该路由的 redux 操作。下面我已经包含了我的两个代码。我想知道如何在动作中调用路线,然后将图像数据传递到路线中?任何帮助或指导将不胜感激。谢谢!
Redux 操作:
// Add Images to profile
export const addImages = (userImages) => async dispatch => {
let formData = new FormData();
formData.append("userImages", userImages);
//console.log(userImages);
//const body = userImages;
try {
const res = await axios.post('http://localhost:5000/api/users/images', formData);
dispatch({
type: ADD_IMAGES,
payload: res.data
});
//dispatch(loadUser());
//dispatch(NavigationActions.navigate({ routeName: 'CreateProfile' }));
} catch (err) {
//console.log('this is the error you are looking for', err);
const errors = err.response.data.errors;
if (errors) {
errors.forEach(error => dispatch(setAlert(error.msg, 'danger')));
}
dispatch({
type: PROFILE_ERROR,
payload: res.data
});
}
}
添加图片路线:
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/');
},
filename: function (req, file, cb) {
cb(null, Date.now() + file.originalname);
}
});
//const upload = multer({ storage: storage, });
const fileFilter = (req, file, cb) => {
// reject a file
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
cb(null, true);
} else {
cb(null, false);
}
};
const upload = multer({
storage: storage, limits: {
fileSize: 1024 * 1024 * 5
},
fileFilter: fileFilter
});
//@route POST api/users/images
//@desc Store user images
//@access Private
router.post("/images", auth, upload.array('userImages', 5),
async (req, res) => {
//console.log(req.files);
const files = req.files;
//console.log(files);
if (!files) {
return res.status(400).json({ errors: [{ msg: 'Please add photos' }] });
}
console.log("here");
try {
console.log("files: " + files);
let desiredUser = await User.findById(req.user.id);
if (desiredUser) {
//desiredUser.bio = bio;
for (let i = 0; i < 5; i++) {
console.log("files[i]: " + files[i])
//console.log(files[i].filename.toString());
desiredUser.userImages.push(files[i].filename.toString());
}
//desiredUser.userImage = files
await desiredUser.save();
return res.json(desiredUser);
} else {
return res.status(400).json({ errors: [{ msg: 'Please add photo' }] });
}
} catch (err) {
console.error(err.message);
return res.status(500).send('Server error');
}
});
首先使用 API 将图像上传到存储服务,如 AWS S3 或 Firebase 存储。一旦 API returns 你上传的图像 URL 你可以在你的 mongodb 文档中更新 URL。
我正在制作一个应用程序,在我的应用程序中,我试图允许用户将图像上传到数据库。对于这个应用程序,我使用的是 MERN(使用本机反应,而不是反应)。我有一个将图像上传到数据库的路由,以及一个调用该路由的 redux 操作。下面我已经包含了我的两个代码。我想知道如何在动作中调用路线,然后将图像数据传递到路线中?任何帮助或指导将不胜感激。谢谢!
Redux 操作:
// Add Images to profile
export const addImages = (userImages) => async dispatch => {
let formData = new FormData();
formData.append("userImages", userImages);
//console.log(userImages);
//const body = userImages;
try {
const res = await axios.post('http://localhost:5000/api/users/images', formData);
dispatch({
type: ADD_IMAGES,
payload: res.data
});
//dispatch(loadUser());
//dispatch(NavigationActions.navigate({ routeName: 'CreateProfile' }));
} catch (err) {
//console.log('this is the error you are looking for', err);
const errors = err.response.data.errors;
if (errors) {
errors.forEach(error => dispatch(setAlert(error.msg, 'danger')));
}
dispatch({
type: PROFILE_ERROR,
payload: res.data
});
}
}
添加图片路线:
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/');
},
filename: function (req, file, cb) {
cb(null, Date.now() + file.originalname);
}
});
//const upload = multer({ storage: storage, });
const fileFilter = (req, file, cb) => {
// reject a file
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
cb(null, true);
} else {
cb(null, false);
}
};
const upload = multer({
storage: storage, limits: {
fileSize: 1024 * 1024 * 5
},
fileFilter: fileFilter
});
//@route POST api/users/images
//@desc Store user images
//@access Private
router.post("/images", auth, upload.array('userImages', 5),
async (req, res) => {
//console.log(req.files);
const files = req.files;
//console.log(files);
if (!files) {
return res.status(400).json({ errors: [{ msg: 'Please add photos' }] });
}
console.log("here");
try {
console.log("files: " + files);
let desiredUser = await User.findById(req.user.id);
if (desiredUser) {
//desiredUser.bio = bio;
for (let i = 0; i < 5; i++) {
console.log("files[i]: " + files[i])
//console.log(files[i].filename.toString());
desiredUser.userImages.push(files[i].filename.toString());
}
//desiredUser.userImage = files
await desiredUser.save();
return res.json(desiredUser);
} else {
return res.status(400).json({ errors: [{ msg: 'Please add photo' }] });
}
} catch (err) {
console.error(err.message);
return res.status(500).send('Server error');
}
});
首先使用 API 将图像上传到存储服务,如 AWS S3 或 Firebase 存储。一旦 API returns 你上传的图像 URL 你可以在你的 mongodb 文档中更新 URL。