Bootstrap Fileinput 文件上传 v5.5.4

官方已有文件选择框的基础样式(.form-control file input),但没有上传预览能力。bootstrap-fileinput 在其基础上提供图片预览、多文件队列、类型与大小限制等功能;5.x 兼容 Bootstrap 5.3,注意它依赖 jQuery。

官方对照

先看 Bootstrap 官方能做什么、本库补齐了什么。

官方已有
对比维度Bootstrap 官方bootstrap-fileinput
能力定位 <input type="file" class="form-control"> 基础样式,仅一个选择按钮 带预览、队列、进度的专业上传控件
核心特性 只能选择文件,选完不可见内容、不可排序 图片/文本预览、多文件队列、扩展名与大小限制、拖拽区域、主题皮肤、AJAX 上传
依赖与体积 零依赖 jQuery 必需;5.x 起兼容 Bootstrap 5;图标默认留空(不强制 Font Awesome)
适用场景 普通表单里的单个附件 商品图片、证件照、批量上传等需要预览与校验的场景
与 Bootstrap 5.3 原生支持 5.5.x 官方声明支持 Bootstrap 5;下方示例为纯前端演示(关闭上传按钮,不真正提交)
对照表说明
结论:官方「已有」文件选择框的基础样式,但「没有」上传预览能力;
需要预览/校验/队列时使用 bootstrap-fileinput,已在 Bootstrap 5.3.8 下真实渲染验证。

引入方式

通过 jsDelivr 固定版本引入。依赖顺序:jQuery → Bootstrap bundle → fileinput.js → 中文语言包;样式放 <head>。本页未引入图标字体,浏览/移除按钮不显示图标。

引入代码
<!-- 样式 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-fileinput@5.5.4/css/fileinput.min.css" rel="stylesheet">

<!-- 脚本:jQuery 必须最先加载 -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap-fileinput@5.5.4/js/fileinput.min.js"></script>
<!-- 中文提示(可选) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap-fileinput@5.5.4/js/locales/zh.js"></script>

基础示例

在原生 <input type="file"> 上调用 $(…).fileinput() 即完成初始化。下方控件已真实渲染:点击选择图片后可立即看到缩略图预览,可多张、可移除。showUpload:false 关闭上传按钮(纯前端演示,不向服务器提交)。

HTML + 初始化 JS
<input id="fi-basic" type="file" multiple>

<script>
$(function () {
  $('#fi-basic').fileinput({
    language: 'zh',
    showUpload: false,          // 纯前端预览,不显示上传按钮
    showRemove: true,
    maxFileCount: 5,
    browseLabel: '选择图片',
    browseIcon: '',             // 不依赖图标字体
    removeIcon: ''
  });
});
</script>

上传选项说明

常用校验选项:allowedFileExtensions 限制扩展名、maxFileSize 限制单文件大小(KB)、maxFileCount 限制数量、msgSelected 自定义已选提示。选中不合规文件时会弹出中文错误提示。

HTML + 初始化 JS
<input id="fi-opts" type="file">

<script>
$(function () {
  $('#fi-opts').fileinput({
    language: 'zh',
    showUpload: false,
    allowedFileExtensions: ['jpg', 'jpeg', 'png', 'gif'],
    maxFileSize: 500,            // KB
    maxFileCount: 3,
    browseLabel: '选择图片',
    browseIcon: '',
    removeIcon: '',
    msgSelected: '{n} 张图片已选中'
  });
});
</script>