元素实现图片上传功能。创建一个受控组件来管理文件选择状态: function Image…">
当前位置:首页 > React

react如何上传图片

2026-01-15 09:17:19React

使用input标签上传图片

在React中可以通过HTML的<input type="file">元素实现图片上传功能。创建一个受控组件来管理文件选择状态:

function ImageUpload() {
  const [selectedFile, setSelectedFile] = useState(null);

  const handleFileChange = (event) => {
    setSelectedFile(event.target.files[0]);
  };

  return (
    <div>
      <input type="file" accept="image/*" onChange={handleFileChange} />
      {selectedFile && (
        <div>
          <p>文件名: {selectedFile.name}</p>
          <p>文件类型: {selectedFile.type}</p>
          <p>文件大小: {selectedFile.size} bytes</p>
        </div>
      )}
    </div>
  );
}

预览选择的图片

使用URL.createObjectURL()可以生成临时URL用于图片预览:

const [preview, setPreview] = useState('');

useEffect(() => {
  if (!selectedFile) return;

  const objectUrl = URL.createObjectURL(selectedFile);
  setPreview(objectUrl);

  return () => URL.revokeObjectURL(objectUrl);
}, [selectedFile]);

return (
  {preview && <img src={preview} alt="预览" width="200" />}
)

上传到服务器

通过FormData对象将文件发送到后端API:

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

  const formData = new FormData();
  formData.append('image', selectedFile);

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

使用第三方库

对于更复杂的需求,可以考虑使用专门的文件上传库:

npm install react-dropzone
import { useDropzone } from 'react-dropzone';

function DropzoneUpload() {
  const { getRootProps, getInputProps } = useDropzone({
    accept: 'image/*',
    onDrop: acceptedFiles => {
      console.log(acceptedFiles);
    }
  });

  return (
    <div {...getRootProps()}>
      <input {...getInputProps()} />
      <p>拖放图片到这里,或点击选择文件</p>
    </div>
  );
}

图片压缩处理

在上传前可以使用浏览器端库进行图片压缩:

react如何上传图片

npm install browser-image-compression
import imageCompression from 'browser-image-compression';

const compressImage = async (file) => {
  const options = {
    maxSizeMB: 1,
    maxWidthOrHeight: 1920,
    useWebWorker: true
  };

  try {
    return await imageCompression(file, options);
  } catch (error) {
    console.log(error);
    return file;
  }
};

分享给朋友:

相关文章

react如何部署

react如何部署

部署 React 应用的常见方法 使用静态服务器部署 React 应用在构建后会生成静态文件,可以直接通过静态服务器部署。常用的静态服务器包括 Nginx、Apache 等。 运行构建命令生成静态文…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react如何重置

react如何重置

重置 React 应用的状态 使用 useState 钩子重新初始化状态变量是最直接的方法。将状态变量重置为初始值或空值即可完成重置。 const [count, setCount] = useSt…

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffect…

react路由如何刷新

react路由如何刷新

React 路由刷新方法 在 React 中,路由刷新通常涉及以下几种场景和解决方案: 强制重新加载当前页面 使用 window.location.reload() 可以强制刷新整个页面,但会丢失…

react如何编码参数

react如何编码参数

编码参数的方法 在React中,编码参数通常涉及URL查询参数或路由参数的编码和解码。以下是几种常见场景的处理方法: URL查询参数编码 使用encodeURIComponent对参数进行编码,避免…