当前位置:首页 > React

react实现预览

2026-01-26 16:09:23React

实现文件预览功能

在React中实现文件预览功能通常涉及多种文件类型(如图片、PDF、视频等)的处理。以下是几种常见文件类型的预览方法:

图片预览

使用URL.createObjectURL将上传的图片文件转换为可预览的URL:

react实现预览

const [previewUrl, setPreviewUrl] = useState('');

const handleImageChange = (e) => {
  const file = e.target.files[0];
  if (file) {
    const url = URL.createObjectURL(file);
    setPreviewUrl(url);
  }
};

return (
  <div>
    <input type="file" accept="image/*" onChange={handleImageChange} />
    {previewUrl && <img src={previewUrl} alt="Preview" style={{ maxWidth: '100%' }} />}
  </div>
);

PDF预览

使用第三方库如react-pdf实现PDF预览:

import { Document, Page } from 'react-pdf';

const [pdfUrl, setPdfUrl] = useState(null);
const [numPages, setNumPages] = useState(null);

const handlePdfChange = (e) => {
  const file = e.target.files[0];
  if (file) {
    const url = URL.createObjectURL(file);
    setPdfUrl(url);
  }
};

return (
  <div>
    <input type="file" accept=".pdf" onChange={handlePdfChange} />
    {pdfUrl && (
      <Document file={pdfUrl} onLoadSuccess={({ numPages }) => setNumPages(numPages)}>
        {Array.from(new Array(numPages), (el, index) => (
          <Page key={`page_${index + 1}`} pageNumber={index + 1} />
        ))}
      </Document>
    )}
  </div>
);

视频预览

使用HTML5的<video>标签预览视频:

react实现预览

const [videoUrl, setVideoUrl] = useState('');

const handleVideoChange = (e) => {
  const file = e.target.files[0];
  if (file) {
    const url = URL.createObjectURL(file);
    setVideoUrl(url);
  }
};

return (
  <div>
    <input type="file" accept="video/*" onChange={handleVideoChange} />
    {videoUrl && (
      <video controls width="100%" src={videoUrl} />
    )}
  </div>
);

通用文件预览

对于无法直接预览的文件类型(如.docx、.xlsx等),可以显示文件信息:

const [fileInfo, setFileInfo] = useState(null);

const handleFileChange = (e) => {
  const file = e.target.files[0];
  if (file) {
    setFileInfo({
      name: file.name,
      type: file.type,
      size: (file.size / 1024).toFixed(2) + ' KB'
    });
  }
};

return (
  <div>
    <input type="file" onChange={handleFileChange} />
    {fileInfo && (
      <div>
        <p>Name: {fileInfo.name}</p>
        <p>Type: {fileInfo.type}</p>
        <p>Size: {fileInfo.size}</p>
      </div>
    )}
  </div>
);

使用第三方预览组件

考虑使用react-file-viewer等库实现更全面的预览功能:

import FileViewer from 'react-file-viewer';

const [fileUrl, setFileUrl] = useState('');
const [fileType, setFileType] = useState('');

const handleFileChange = (e) => {
  const file = e.target.files[0];
  if (file) {
    const url = URL.createObjectURL(file);
    setFileUrl(url);
    setFileType(file.type.split('/')[1]); // 提取文件扩展名
  }
};

return (
  <div>
    <input type="file" onChange={handleFileChange} />
    {fileUrl && (
      <FileViewer
        fileType={fileType}
        filePath={fileUrl}
        onError={(e) => console.error('Error:', e)}
      />
    )}
  </div>
);

注意事项

  • 使用URL.revokeObjectURL()释放内存,可在组件卸载时调用:
    useEffect(() => {
      return () => {
        if (previewUrl) URL.revokeObjectURL(previewUrl);
      };
    }, [previewUrl]);
  • 对于大文件,考虑使用文件分片或流式处理
  • 服务端文件预览需要额外处理,通常通过返回文件URL实现

标签: react
分享给朋友:

相关文章

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yar…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

react如何运行

react如何运行

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