You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在文件选择后显示图片或PDF标识?

解决方案

核心思路

监听文件上传事件,通过判断文件MIME类型做分支处理:

  • 图片类型(image/*)沿用原有FileReader逻辑生成预览图
  • PDF类型(application/pdf)替换为预设的PDF图标显示

完整代码实现

1. HTML 结构

基于常见的上传/预览结构调整,保留核心控件:

<!-- 文件上传控件,限制仅允许图片和PDF -->
<input type="file" id="fileUpload" accept="image/*,.pdf">
<!-- 预览容器 -->
<div id="previewContainer" style="width: 200px; height: 200px; border: 1px dashed #ccc; display: flex; align-items: center; justify-content: center; margin-top: 10px;"></div>

2. JavaScript 逻辑

添加类型判断和预览渲染逻辑:

const fileUpload = document.getElementById('fileUpload');
const previewContainer = document.getElementById('previewContainer');

// 内嵌PDF图标(base64编码,无需外部资源)
const pdfIconBase64 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBkPSJNOC41IDJINmMtMS4xIDAtMiAxLjEtMiAyVjIyYzAgMS4xIDEuMSAyIDIgMmgxNmMxLjEgMCAyLTEuMSAyLTJWNGMwLTEuMS0xLjEtMi0yLTJIMTguNVYxSDguNVYyWiIgZmlsbD0iIzE0MzRDQyIvPgogIDxwYXRoIGQ9Ik0xNiA2SDEwVjE4aDZWNiIgZmlsbD0iI0VCNDk0QiIvPgogIDxwYXRoIGQ9Ik0xMiAxMmg0VjE2SDEyVjEyIiBmaWxsPSIjRUI0OTRCIi8+CiAgPHBhdGggZD0iTTEyIDZoNFYxMC41SDEyVjYiIGZpbGw9IiNFQjQ5NEIiLz4KICA8cGF0aCBkPSJNMTIgMTBoNFYxMi41SDEyVjEwIiBmaWxsPSIjRUI0OTRCIi8+CiAgPHBhdGggZD0iTTEyIDE0aDRWMTYuNUgxMlYxNCIgZmlsbD0iI0VCNDk0QiIvPgo8L3N2Zz4=';

fileUpload.addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  // 清空预览区域
  previewContainer.innerHTML = '';

  if (file.type.startsWith('image/')) {
    // 图片文件:生成预览图
    const reader = new FileReader();
    reader.onload = function(event) {
      const img = document.createElement('img');
      img.src = event.target.result;
      img.style.maxWidth = '100%';
      img.style.maxHeight = '100%';
      previewContainer.appendChild(img);
    };
    reader.readAsDataURL(file);
  } else if (file.type === 'application/pdf') {
    // PDF文件:显示预设图标
    const pdfIcon = document.createElement('img');
    pdfIcon.src = pdfIconBase64;
    pdfIcon.alt = 'PDF文件';
    pdfIcon.style.width = '80px';
    pdfIcon.style.height = '80px';
    previewContainer.appendChild(pdfIcon);
  } else {
    // 其他不支持的文件类型提示
    previewContainer.textContent = '仅支持图片和PDF文件';
  }
});

3. 可选样式优化

给预览区域加基础交互效果:

#previewContainer {
  transition: border-color 0.3s;
}
#previewContainer:hover {
  border-color: #666;
}

关键说明

  • 用file.type判断MIME类型比后缀名更可靠,同时配合accept属性限制上传范围
  • PDF图标采用base64内嵌,避免外部资源依赖和跨域问题
  • 完全兼容原有图片预览逻辑,仅新增PDF分支处理

内容的提问来源于stack exchange,提问作者Ikmal Shahfiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:40:29