原生js多文件本地上传预览

2024-06-12 15:48
文章标签 js 本地 预览 上传 原生

本文主要是介绍原生js多文件本地上传预览,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引子

<input> type 类型为 file 的 input 元素使得用户可以选择一个或多个元素以提交表单的方式上传到服务器上,或者通过 Javascript 的 File API 对文件进行操作 。

语法

属性说明
ValueDOMString 选择文件的路径
事件change 事件 input
支持的常用属性accept, multiple, required
IDL 属性文件 和 值
方法select()
  • 解释
    文件输入的 value 属性包括了一个 value 表示选择文件的路径DOMString。如果用户选择了多个文件,则该值表示他们选择的文件列表中的第一个文件。 可以使用输入的HTMLInputElement.files属性标识其他文件

  • 提示

  1. 如果选择了多个文件, 这个值表示第一个被选择的文件路径。JavaScript 可以通过 Input 的 FileList属性获取到其他的文件路径。
  2. 没有选择文件该值为空字符串。
  3. 为了阻止恶意软件猜测文件路径, 该值 以 C:\fakepath\为前缀。

使用

包括上面所说的 multiple 属性, 多个文件可以被同时选中. 只要用户所在的平台允许 (e.g. 摁住 Shift 或者 Control), 用户可以选择多个文件. 如果不希望多选, 忽略 multiple 属性.

在上面的例子中, 当表单被提交, 每个选中的文件名将被添加到 URL 参数中?file=file1.txt&file=file2.txt

获取选中文件信息
  • 选中文件通过 HTMLInputElement.files 属性返回 — 返回值是一个 FileList 对象,这个对象是一个包含了许多 File 文件的列表(你也可以想列表一样操作它).

  • 每个 File 对象包含了下列信息:

name: 文件名.
lastModified: UNIX timestamp 形式的最后修改时间.
lastModifiedDate: Date 形式的最后修改时间.
size: 文件的字节大小.
type: DOMString 文件的 MIME 类型.

限制允许的文件类型

accept 属性接受一个逗号分隔的 MIME 类型字符串, 如:

accept="image/png" or accept=".png" — 只接受 png 图片.
accept="image/png, image/jpeg" or accept=".png, .jpg, .jpeg" — PNG/JPEG 文件.
accept="image/*" — 接受任何图片文件类型.
accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document" — 接受任何 MS Doc 文件类型.
下面是一个更完整的例子:

示例代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>multiple file uploade</title>
</head><body><h4>多文件上传</h4><p>使用 opacity 而不是 visibility: hidden / display: none的原因是因为visibility和display会让input不可选择</p><form><div><label for="image_uploads">点击选择多图片上传 (PNG, JPG)</label><input type="file" id="image_uploads" name="image_uploads" accept=".jpg, .jpeg, .png" multiple></div><div class="preview"><p>No files currently selected for upload</p></div><div><button>Submit</button></div></form><script>// 获取 input 元素var input = document.querySelector('input');// 获取 preview 元素var preview = document.querySelector('.preview');// 将 input 变成透明的input.style.opacity = 0;// 监听 input 的 change 事件input.addEventListener('change', updateImageDisplay);// 监听函数function updateImageDisplay() {// while 循环清空 preview 中的内容. while (preview.firstChild) {preview.removeChild(preview.firstChild);}// 获取 FileList 对象并且将选中文件保存到 curFiles 变量中var curFiles = input.files;// 检查是否没有选中文件if (curFiles.length === 0) {var para = document.createElement('p');para.textContent = 'No files currently selected for upload';preview.appendChild(para);} else {// 创建有序列表var list = document.createElement('ol');preview.appendChild(list);for (var i = 0; i < curFiles.length; i++) {var listItem = document.createElement('li');var para = document.createElement('p');//检查文件类型是否正确if (validFileType(curFiles[i])) {// 在 div 中打印文件名称和 sizepara.textContent = 'File name ' + curFiles[i].name + ', file size ' + returnFileSize(curFiles[i].size) + '.';// 通过 window.URL.createObjectURL(curFiles[i]) 以及 css 产生预览图.var image = document.createElement('img');// 生成blob对象image.src = window.URL.createObjectURL(curFiles[i]);listItem.appendChild(image);listItem.appendChild(para);} else {// 不正确则将结果告知用户para.textContent = 'File name ' + curFiles[i].name +': Not a valid file type. Update your selection.';listItem.appendChild(para);}list.appendChild(listItem);}}}// 自定义的 validFileType() 接受一个 File 对象作为参数, 然后检查文件类型是否在 accept 列表中.var fileTypes = ['image/jpeg','image/pjpeg','image/png']// 验证文件类型function validFileType(file) {for (var i = 0; i < fileTypes.length; i++) {if (file.type === fileTypes[i]) {return true;}}return false;}// returnFileSize()方法接受一个数字作为参数以 KB/MB 的形式返回结果.function returnFileSize(number) {if (number < 1024) {return number + 'bytes';} else if (number > 1024 && number < 1048576) {return (number / 1024).toFixed(1) + 'KB';} else if (number > 1048576) {return (number / 1048576).toFixed(1) + 'MB';}}</script>
</body></html>

这篇关于原生js多文件本地上传预览的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054650

相关文章

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

GitLab文件的上传与下载方式

《GitLab文件的上传与下载方式》:本文主要介绍GitLab文件的上传与下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录GitLab 项目拉取到本地GitLab 项目上传方法方法 1:本地项目未初始化Git方法 2:本地项目已初始化GitGitLab 上

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

go rate 原生标准限速库的使用

《gorate原生标准限速库的使用》本文主要介绍了Go标准库golang.org/x/time/rate实现限流,采用令牌桶算法控制请求速率,提供Allow/Reserve/Wait方法,具有一定... 目录介绍安装API介绍rate.NewLimiter:创建限流器limiter.Allow():请求是否

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1