原生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

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

局域网内vue2 配置本地IP地址访问项目

在日常开发中同事可能需要访问你的前端项目,可以通过配置实现通过ip访问 一.首先找到config文件夹目录下的 index.js文件             将此处的host的值修改为0.0.0.0(即 host: 0.0.0.0) // Various Dev Server settings//host: 'localhost' //将localhost进行替换成 0.0.0.0host:

js小题:通过字符串执行同名变量怎么做

在JavaScript中,你不能直接使用一个字符串来直接引用一个变量,因为JavaScript是一种静态类型语言(尽管它的类型在运行时可以变化),变量的名字在编译时就被确定了。但是,有几种方法可以实现类似的功能: 使用对象(或Map)来存储变量: 你可以使用一个对象来存储你的变量,然后使用字符串作为键来访问这些变量。 let myVars = { 'var1': 'Hello', 'var

图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

先来认一下Paper的资源对象,小弟有哪些,有个整体的认识。认个脸。 在Paper.js的 官方文档中类大致有如下这些: 基类: ProjectViewItemPointToolSizeSegmentRectangleCurveCurveLocationMatrixColorStyleTweenToolEventGradientGradientStopEvent 二级或三级类 继承Ite

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key="info.id" >编辑上传图片// oss返回线上地址http链接格式:<el-form-itemlabel="巡视结果照片":label-width="formLabelWidth"><el-upload:action="'http:

HTML文档插入JS代码的几种方法

在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内联,放置在< script>和标签对之间。 2.放置在由< script>标签的src属性指定的外部文件中。 3.放置在HTML事件处理程序中,该事件处理程序由onclick或onmouseover这样的HTML属性值指定。 4.放在一个URL里,这个URL使用特殊的“javascript:”协议。 在JS编程中,主张

js 正则表达式出现问题

帮同事写个页面,出现正则表达式不管怎么改都没法匹配的情况。。。。 reg = /^sy[0-9]+$/i; if(rtx.match(reg) == null){ alert("请输入正确的RTX账号!"); return false; } 因为之前一直用的是 reg ="/^sy[0-9]+$/i"; 写PHP写习惯了。。外面多写了两个双引号……T.T 改

bootstrap和JS相关

下表列出了模态框中要用到事件。这些事件可在函数中当钩子使用。 bootstrap 显示隐藏div $('.show-info').click(function () {var show = $(this).data('show');if(show =='all'){$('#creative').show();$('#plan').show();$('#plan').attr('class','

sublime配置node.js

1、下载Nodejs插件,下载地址为: https://github.com/tanepiper/SublimeText-Nodejs(见本人网盘) 下载zip压缩包后解压,文件名改为Nodejs 2、打开Sublime Text3,点击菜单“Perferences” =>“Browse Packages”打开“Packages”文件夹,并将第1部的Nodejs文件夹剪切进来 3