input type=“file” 获取文件名、文件类型、文件大小

本文介绍如何使用HTML中的input标签实现文件上传功能,并通过JavaScript获取所选文件的名称、大小及类型。同时,还提供了一个实用函数,用于将文件大小转换为更易读的KB、MB、GB或TB格式。

HTML代码

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

 获取文件名、文件大小、文件类型

  $('#deviceFile').bind('input propertychange', function () {


       let f = document.getElementById('deviceFile').files;
       let [fileName, fileSize, fileType] = [f[0].name, f[0].size, f[0].type];
                                      /*分别获取   文件名   文件大小   文件类型*/

       $('.importBtn').hide();
       $(this).parent('.importBtn').next().find('dt').text(f[0].name + '.' + f[0].type);
       $(this).parent('.importBtn').next().find('dd').text('(' + getfilesize(f[0].size) + ')')
       $(this).parent('.importBtn').next().show();
   })

 将文件大小 改成KB 、MB 、 G 、 T  格式

 function getfilesize(size) {//把字节转换成正常文件大小
            if (!size) return "";
            var num = 1024.00; //byte
            if (size < num)
                return size + "B";
            if (size < Math.pow(num, 2))
                return (size / num).toFixed(2) + "KB"; //kb
            if (size < Math.pow(num, 3))
                return (size / Math.pow(num, 2)).toFixed(2) + "MB"; //M
            if (size < Math.pow(num, 4))
                return (size / Math.pow(num, 3)).toFixed(2) + "G"; //G
            return (size / Math.pow(num, 4)).toFixed(2) + "T"; //T
        }

<think>好的,我现在需要帮助用户解决如何在JavaScript获取HTML input[type=file]上传的文件对象的问题。根据用户提供的引用内容,我需要综合这些信息,并结合自己的知识,给出一个清晰的步骤说明。 首先,用户的问题是关于获取文件对象。根据引用[1],提到使用FileReader API读取文件内容,这应该是在获取到文件对象之后的操作。引用[2]和[3]展示了如何获取文件路径或文件名,但用户需要的是文件对象本身。引用[4]提到了使用ActiveXObject,但这种方法可能仅限于旧版IE,现代浏览器可能不支持,所以可能不太推荐。 我应该先考虑标准的现代方法。在HTML中,input元素typefile时,用户选择文件后,可以通过DOM获取该元素的files属性。这个files属性是一个FileList对象,里面包含了用户选择的文件列表。每个文件都是一个File对象,包含文件名、大小、类型等信息。 接下来,需要确定如何正确访问这个files属性。根据引用[3]中的例子,通过类名获取元素,比如document.querySelector('.inputPic'),然后访问其files属性。因此,正确的步骤应该是: 1. 在HTML中创建input元素,并设置typefile,可能需要指定id或class以便于JavaScript选择。 2. 在JavaScript中,通过DOM方法获取input元素。 3. 监听input元素的change事件,当用户选择文件后触发。 4. 在事件处理函数中,访问input元素的files属性,得到FileList对象。 5. 从FileList中获取具体的File对象,如files[0]表示第一个文件。 需要注意的是,用户可能选择多个文件,如果input没有设置multiple属性,则files列表最多只有一个文件。另外,引用[1]中的示例使用FileReader来读取文件内容,这可能可以作为后续处理的一部分,比如读取文件内容或上传。 另外,引用[4]提到获取文件大小,可以通过File对象的size属性获得,类型则是type属性。这些信息都可以从File对象中直接获取,无需使用ActiveXObject,后者可能不兼容现代浏览器。 现在要确保给出的代码示例正确,比如使用addEventListener来监听change事件,然后获取files。同时要处理可能的多文件情况,但用户的问题可能只需要单个文件,所以示例可以针对单个文件。 可能的问题点:用户可能忘记监听change事件,直接在页面加载时就尝试获取files,此时文件尚未选择,结果为空。因此必须强调事件监听的重要性。 综合以上步骤,可以整理出一个完整的示例,包括HTML和JavaScript部分,展示如何获取File对象,并访问其属性如name、size、type等。同时,可以提到使用FileReader来读取文件内容,如引用[1]所示,但用户的问题主要在于获取对象,所以这部分可以作为扩展内容。 最后,检查是否有遗漏,比如兼容性问题。现代浏览器都支持files属性和File API,所以不需要特别处理,但可能需要提醒用户关于旧版浏览器的问题,不过根据引用[4],ActiveX方法已经不推荐,应使用标准API。</think>在JavaScript获取HTML input[type=file]选择的文件对象,可以通过以下步骤实现: --- ### 1. **HTML设置** 首先在HTML中定义文件选择控件: ```html <input type="file" id="fileInput" onchange="handleFileSelect(event)"> <!-- 或通过class选择 --> <input type="file" class="fileUpload"> ``` --- ### 2. **通过事件监听获取文件对象** #### 方法1:通过`change`事件直接获取 ```javascript function handleFileSelect(event) { const files = event.target.files; // 获取FileList对象 const firstFile = files[0]; // 获取第一个文件对象 console.log("文件名:", firstFile.name); console.log("文件大小:", firstFile.size, "字节"); console.log("文件类型:", firstFile.type); } ``` #### 方法2:通过DOM选择器获取 ```javascript document.querySelector('.fileUpload').addEventListener('change', function(e) { const files = e.target.files; // 文件列表 if (files.length > 0) { const file = files[0]; // 文件对象 // 进一步操作(如上传或读取内容) } }); ``` --- ### 3. **关键属性说明** - **`files`**:返回`FileList`对象,包含用户选择的文件列表[^3]。 - **`File`对象属性**: - `name`:文件名(不包含路径)[^2]。 - `size`:文件大小(字节)[^4]。 - `type`:MIME类型(如`image/png`)。 --- ### 4. **扩展:读取文件内容** 使用`FileReader` API读取文件内容(如文本或图片): ```javascript const reader = new FileReader(); reader.onload = function(e) { console.log("文件内容:", e.target.result); // 输出Base64编码或文本 }; reader.readAsDataURL(file); // 读取为Base64(适用于图片) // 或 reader.readAsText(file); // 读取为文本 ``` --- ### 注意事项 - **浏览器兼容性**:`File`和`FileReader` API在所有现代浏览器中支持[^1]。 - **安全限制**:无法直接获取文件完整路径[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值