要从React JS上传图片到Json-server,你需要完成以下几个步骤:
首先,确保你已经安装了json-server
。如果没有安装,可以使用以下命令进行安装:
npm install -g json-server
然后,创建一个db.json
文件来模拟数据库:
{
"images": []
}
启动Json-server:
json-server --watch db.json --port 5000
确保你已经创建了一个React项目。如果没有,可以使用以下命令创建:
npx create-react-app my-app
cd my-app
在React项目中创建一个上传图片的组件。假设我们创建一个名为ImageUpload.js
的文件:
import React, { useState } from 'react';
const ImageUpload = () => {
const [file, setFile] = useState(null);
const [message, setMessage] = useState('');
const handleFileChange = (event) => {
setFile(event.target.files[0]);
};
const handleUpload = async () => {
if (!file) {
setMessage('Please select a file');
return;
}
const formData = new FormData();
formData.append('image', file);
try {
const response = await fetch('http://localhost:5000/images', {
method: 'POST',
body: formData,
});
if (response.ok) {
setMessage('File uploaded successfully');
} else {
setMessage('Failed to upload file');
}
} catch (error) {
setMessage('Error uploading file');
}
};
return (
<div>
<input type="file" onChange={handleFileChange} />
<button onClick={handleUpload}>Upload</button>
{message && <p>{message}</p>}
</div>
);
};
export default ImageUpload;
默认情况下,Json-server不支持文件上传。你需要使用中间件来处理文件上传。可以使用multer
和express
来实现这一点。
首先,安装所需的依赖:
npm install express multer
然后,创建一个server.js
文件:
const express = require('express');
const multer = require('multer');
const jsonServer = require('json-server');
const server = express();
const router = jsonServer.router('db.json');
const middlewares = jsonServer.defaults();
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
cb(null, Date.now() + '-' + file.originalname);
},
});
const upload = multer({ storage });
server.use(middlewares);
server.use('/images', upload.single('image'), router);
server.listen(5000, () => {
console.log('JSON Server is running');
});
确保你有一个uploads
文件夹来存储上传的文件。
通过以上步骤,你应该能够成功从React JS上传图片到Json-server。
云+社区沙龙online [技术应变力]
云+社区技术沙龙[第8期]
云+社区开发者大会 长沙站
云+未来峰会
云+社区技术沙龙[第14期]
云+社区技术沙龙[第21期]
技术创作101训练营
云+社区技术沙龙[第5期]
云+社区技术沙龙[第7期]
云+社区技术沙龙[第9期]
Elastic 中国开发者大会
领取专属 10元无门槛券
手把手带您无忧上云