当前位置:首页 > React

react实现图片上传

2026-01-27 06:55:31React

实现图片上传功能

在React中实现图片上传功能通常涉及以下几个步骤:

创建上传组件

使用input元素创建文件上传控件,设置typefile并限制接受的类型为图片:

react实现图片上传

function ImageUpload() {
  const [selectedImage, setSelectedImage] = useState(null);

  return (
    <div>
      <input 
        type="file" 
        accept="image/*"
        onChange={(e) => setSelectedImage(e.target.files[0])}
      />
    </div>
  );
}

预览上传的图片

在图片上传前提供预览功能,使用URL.createObjectURL生成临时URL:

react实现图片上传

{selectedImage && (
  <div>
    <img 
      alt="预览" 
      src={URL.createObjectURL(selectedImage)} 
      style={{ maxWidth: '100%', maxHeight: '200px' }}
    />
    <button onClick={() => setSelectedImage(null)}>移除</button>
  </div>
)}

上传到服务器

使用FormDatafetchAPI将图片发送到服务器:

const handleUpload = async () => {
  const formData = new FormData();
  formData.append('image', selectedImage);

  try {
    const response = await fetch('/api/upload', {
      method: 'POST',
      body: formData
    });
    const data = await response.json();
    console.log('上传成功:', data);
  } catch (error) {
    console.error('上传失败:', error);
  }
};

完整组件示例

import { useState } from 'react';

function ImageUploader() {
  const [selectedImage, setSelectedImage] = useState(null);
  const [isUploading, setIsUploading] = useState(false);

  const handleUpload = async () => {
    if (!selectedImage) return;

    setIsUploading(true);
    const formData = new FormData();
    formData.append('image', selectedImage);

    try {
      const response = await fetch('/api/upload', {
        method: 'POST',
        body: formData
      });
      const data = await response.json();
      alert('上传成功');
    } catch (error) {
      alert('上传失败');
    } finally {
      setIsUploading(false);
    }
  };

  return (
    <div>
      <h2>图片上传</h2>
      <input
        type="file"
        accept="image/*"
        onChange={(e) => setSelectedImage(e.target.files[0])}
      />

      {selectedImage && (
        <div>
          <img
            alt="预览"
            src={URL.createObjectURL(selectedImage)}
            style={{ maxWidth: '100%', maxHeight: '200px' }}
          />
          <button onClick={() => setSelectedImage(null)}>移除</button>
          <button onClick={handleUpload} disabled={isUploading}>
            {isUploading ? '上传中...' : '上传图片'}
          </button>
        </div>
      )}
    </div>
  );
}

服务器端处理

Node.js Express服务器的示例处理代码:

const express = require('express');
const multer = require('multer');
const path = require('path');

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/api/upload', upload.single('image'), (req, res) => {
  if (!req.file) {
    return res.status(400).send('没有上传文件');
  }

  res.json({
    message: '文件上传成功',
    filename: req.file.filename,
    path: req.file.path
  });
});

app.listen(3000, () => console.log('服务器运行中'));

注意事项

  • 添加文件大小限制,防止上传过大文件
  • 验证文件类型,确保只接受图片
  • 在生产环境中考虑使用云存储服务如AWS S3或阿里云OSS
  • 添加进度指示器改善用户体验
  • 考虑使用第三方库如react-dropzone实现拖放上传功能

分享给朋友:

相关文章

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何调试

react如何调试

调试 React 应用的方法 使用 React Developer Tools React Developer Tools 是 Chrome 和 Firefox 的浏览器扩展,可以检查组件树、状态和…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致…

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。…

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工…