要以正确的方式显示上传到React上的Express服务器上的图片,你可以按照以下步骤进行操作:
static
中间件来实现这个功能。在你的Express应用的入口文件中添加以下代码:app.use(express.static('uploads'));
这将使Express服务器能够访问名为"uploads"的文件夹中的文件。
input
元素和FormData
对象来实现文件上传功能。在你的React组件中添加一个文件上传的表单,并在提交时将选择的图片文件发送到Express服务器。以下是一个简单的示例:import React, { useState } from 'react';
import axios from 'axios';
const ImageUploadForm = () => {
const [selectedImage, setSelectedImage] = useState(null);
const handleImageChange = (event) => {
setSelectedImage(event.target.files[0]);
};
const handleSubmit = async (event) => {
event.preventDefault();
const formData = new FormData();
formData.append('image', selectedImage);
try {
await axios.post('/upload', formData);
console.log('Image uploaded successfully');
} catch (error) {
console.error('Error uploading image', error);
}
};
return (
<form onSubmit={handleSubmit}>
<input type="file" accept="image/*" onChange={handleImageChange} />
<button type="submit">Upload</button>
</form>
);
};
export default ImageUploadForm;
在上面的示例中,我们通过axios
库将图片文件上传到Express服务器的"/upload"端点。
img
元素的src
属性来指定图片的URL,将其设置为Express服务器上存储图片的文件夹路径加上图片文件名。以下是一个示例:import React, { useEffect, useState } from 'react';
import axios from 'axios';
const DisplayImage = () => {
const [imageUrl, setImageUrl] = useState('');
useEffect(() => {
const fetchImage = async () => {
try {
const response = await axios.get('/image-url'); // 从Express服务器获取图片的URL
setImageUrl(response.data.imageUrl);
} catch (error) {
console.error('Error fetching image URL', error);
}
};
fetchImage();
}, []);
return <img src={imageUrl} alt="Uploaded Image" />;
};
export default DisplayImage;
在上面的示例中,我们通过axios
库从Express服务器获取图片的URL,并将其赋值给imageUrl
状态变量。然后,我们使用img
元素来显示图片。
在Express服务器中,你需要创建一个用于获取图片URL的端点。以下是一个示例:
app.get('/image-url', (req, res) => {
const imageUrl = '/uploads/image.jpg'; // 替换为实际的图片路径
res.json({ imageUrl });
});
以上是一个简单的示例,你可以根据你的实际需求进行修改和优化。在实际项目中,你可能需要处理更多的图片上传和显示逻辑。
领取专属 10元无门槛券
手把手带您无忧上云