即可实现基础功能。以下是基本实现方式:
当前位置:首页 > JavaScript

js 实现input file

2026-03-01 03:02:06JavaScript

实现文件上传的input元素

在HTML中创建一个文件上传输入框非常简单,使用<input type="file">即可实现基础功能。以下是基本实现方式:

<input type="file" id="fileInput">

监听文件选择事件

通过JavaScript可以监听用户选择文件的事件,获取文件信息:

document.getElementById('fileInput').addEventListener('change', function(event) {
    const files = event.target.files;
    console.log('选中的文件:', files);
});

获取文件详细信息

从事件对象中可以获取文件的名称、大小、类型等信息:

const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', function(e) {
    const selectedFile = e.target.files[0];
    console.log('文件名:', selectedFile.name);
    console.log('文件大小:', selectedFile.size, 'bytes');
    console.log('文件类型:', selectedFile.type);
    console.log('最后修改时间:', selectedFile.lastModified);
});

限制文件类型

可以通过accept属性限制用户只能选择特定类型的文件:

<input type="file" accept=".jpg,.jpeg,.png,.pdf">

或者使用MIME类型限制:

js 实现input file

<input type="file" accept="image/*">

多文件选择

添加multiple属性允许用户选择多个文件:

<input type="file" multiple>

处理多个文件时需要遍历files数组:

fileInput.addEventListener('change', function(e) {
    Array.from(e.target.files).forEach(file => {
        console.log(file.name);
    });
});

文件预览(图片)

对于图片文件,可以使用FileReader实现预览功能:

js 实现input file

const fileInput = document.getElementById('fileInput');
const preview = document.getElementById('preview');

fileInput.addEventListener('change', function(e) {
    const file = e.target.files[0];
    if (!file.type.match('image.*')) return;

    const reader = new FileReader();
    reader.onload = function(e) {
        preview.src = e.target.result;
    };
    reader.readAsDataURL(file);
});

自定义样式

原生的文件输入框样式有限,可以通过以下方式实现自定义样式:

<label class="custom-file-upload">
    <input type="file"/>
    选择文件
</label>
.custom-file-upload {
    border: 1px solid #ccc;
    display: inline-block;
    padding: 6px 12px;
    cursor: pointer;
}
input[type="file"] {
    display: none;
}

文件上传到服务器

使用FormData对象和fetch API可以将文件上传到服务器:

const formData = new FormData();
formData.append('file', fileInput.files[0]);

fetch('/upload', {
    method: 'POST',
    body: formData
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

清除已选文件

通过重置input的值可以清除已选择的文件:

fileInput.value = '';

拖放文件上传

除了点击选择文件,还可以实现拖放功能:

<div id="dropArea">
    拖放文件到这里
</div>
const dropArea = document.getElementById('dropArea');

dropArea.addEventListener('dragover', (e) => {
    e.preventDefault();
    dropArea.classList.add('highlight');
});

dropArea.addEventListener('dragleave', () => {
    dropArea.classList.remove('highlight');
});

dropArea.addEventListener('drop', (e) => {
    e.preventDefault();
    dropArea.classList.remove('highlight');
    const files = e.dataTransfer.files;
    console.log(files);
});

标签: jsinput
分享给朋友:

相关文章

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…