reactjs - 将图像文件上传到 Mongodb 会创建一个空项目。反应 JS
问题描述
我目前正在使用 mongodb 数据库在 React JS 中开发一个 Web 应用程序来上传数据。我正在尝试将图像文件上传到数据库,但项目显示为空。我将如何解决这个问题?
上传数据的后端代码
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const multer = require('multer');
const GridFsStorage = require('multer-gridfs-storage');
const url = "mongodb://localhost:27017/StudyAppDB";
const storage = new GridFsStorage({ url });
const upload = multer({ storage });
const app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
mongoose.connect("mongodb://localhost:27017/StudyAppDB", {useNewUrlParser: true, useUnifiedTopology: true});
const imageSchema = {
key: String,
file: {
name: String,
lastModified: Number,
lastModifiedDate: String,
size: Number,
type: String,
webkitRelativePath: String,
},
filename: String,
}
const Images = mongoose.model("Images", imageSchema);
app.post('/uploadfile', upload.single('avatar'), (req, res) => {
const newImages = new Images(
req.body.data
)
newImages.save(function (err) {
if (!err) {
res.send("saved");
} else {
res.send(err);
}
});
})
app.listen(5000, function (req, res) {
console.log("listening");
})
采集数据的前端代码:fileUploadHandler 是上传数据到数据库的函数。
import React, {useState} from 'react';
import './Feed.css';
import axios from 'axios';
const multer = require('multer');
const GridFsStorage = require('multer-gridfs-storage');
const url = "mongodb://localhost:27017/StudyAppDB";
// Create a storage object with a given configuration
const storage = new GridFsStorage({ url });
// Set multer storage engine to the newly created object
const upload = multer({ storage });
export default function PostForm(props) {
const [selectedFile, setSelectedFile] = useState(null)
function fileSelectedHandler(event) {
setSelectedFile(event.target.files[0])
}
function fileUploadHandler(){
// Create an object of formData
const formData = new FormData();
// Update the formData object
formData.append(
"myFile",
selectedFile,
selectedFile.name
);
axios.post("uploadfile", upload.single('avatar'), {data: formData})
.then(function (response) {
//after submitting go to calendar page or whatever
})
.catch(function (error) {
console.log(error);
});
}
return (
<div className="post-form">
<form onSubmit={handleSubmit} style={{width: '99%'}}>
Category:
<div>
<select style={{width: '15%', padding: '0.2%', marginTop: '1%'}} value={category} onChange={(e) => setCategory(e.target.value)}>
{props.categories.map((category, index) =>
<option key={category} value={category}>{category}</option>
)}
</select>
</div>
<br/>
<div style={{textAlign:'center'}}><textarea className='newContentText' value={content} onChange={e => setContent(e.target.value)}/> </div>
<input type="file" onChange={fileSelectedHandler}/>
<button onClick={fileUploadHandler}>Upload</button>
<button className="postButton">Post</button>
</form>
</div>
)
}
解决方案
推荐阅读
- web-scraping - Python Web Scraping:无法从 bs4 元素中提取文本
- wso2 - 在 WSO2 身份管理器中按代码 (REST API) 添加角色
- sql - 将 Int 列作为分钟添加到时间戳
- corda - 是否使用 devMode=false 禁用了节点的 CRaSH shell?
- python - Python 3:为什么在我的情况下 print (..., end=" ", flush=True) 不能用于输出覆盖?
- micronaut - 支持模板语言?
- python - 将 win32com Outlook 附件直接保存到变量
- python - 如何使用 Selenium (Python) 获取 AJAX URL?
- python - 如何在 python 中打印 SQLite 查询的结果?
- sql - SQL 查询,您将如何编写查询来接收此答案?