前端上传文件的几种方式

出于安全考量,操作系统分配给浏览器的权限较低,而单个网页所拥有对用户电脑操作的权限就更低了,这是为了防止因用户的操作不当导致恶意网页随意增删改动用户本地的文件,所以在前端网页中所有的文件操作必须全都由用户来主动操作触发文件上传。

用户触发文件上传操作的类型大致有以下几种常用方法

  • 使用input标签,通过一个type设置为file的输入框可以选中本地文件
  • 通过html5的拖拽方法进行文件上传
  • 通过在编辑框进行文件复制 
    下面我们就对这几种不同的上传方法进行一个详细的分析,分析不同方法的一个特效和优劣

input上传

input上传

<form>   <input type="file" id="uploadfile" ></form>

接着我们可以通过给这个input绑定一个change事件,当监测到该元素选中文件时我们就获取当前一个object对象并对其files的属性值进行操作,具体代码如下:

var file=document.querySelector("#uploadfile");   file.onchange=function(){       var object=this;       console.log(object.files);       for(var i=0;i<object.files.length;i++){           var url=window.URL.createObjectURL(object.files[i]);       }   }

此时在控制台中会输出一个filelist的对象,其中就包含当前选中的多个文件,我们通过这个对象进行属性访问即可获得我们需要的window.file的实例,我们可以通过对这个实例的type,size进行过滤选中我们需要的文件类型和文件大小。

我们接下来可以通过window.URL.createObjectURL这个方法获取一个window.file实例的路径从而获取该文件在用户电脑中的路径,这个路径的写法和我们常用的不同,它对前端开发人员也是透明的,不能够直接读取里面的内容但是计算机可以进行读取。它的地址指向的是一个blob的本地数据,这个数据可直接给页面上的img、video、audio等元素设置一个路径方便用户在前端页面上进行预览操作

H5拖拽

<div class="img-container">   将图片拖拽至此</div>

他会在页面中显示一个框,然后我们可以监听他的拖拽事件

var file=document.querySelector(".img-container");   file.ondragover=function(){       var object=event.originalEvent.dataTransfer;       console.log(object.files);       for(var i=0;i<object.files.length;i++){           var url=window.URL.createObjectURL(object.files[i]);       }   }

我们对这个拖拽事件的原始时间对象进行读取即可获得一个类filelist的对象,接下来的操作方法同上

文件粘贴

<div class="img-container"  contenteditable="true">   将图片粘贴至此</div>

如果使用图片粘贴方法的话,咱们通常需要给这个目标div设置一个contenteditable为true的属性,因为默认情况下div元素皆是不可编辑的

var file=document.querySelector(".img-container");   file.onpaste=function(){       var object=event.originalEvent.clipboardData;       console.log(object.files);       for(var i=0;i<object.files.length;i++){           var url=window.URL.createObjectURL(object.files[i]);       }   }

使用粘贴方法的话,此时待粘贴的数据全部藏在事件的.originalEvent.clipboardData属性值中,获取到的也是一个filelist,接下来的操作方法同上

时间: 2024-10-09 03:38:12

前端上传文件的几种方式的相关文章

SpringMVC上传文件的三种方式(转载)

直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html 前台: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <%@ page language="java" contentTy

上传文件的三种方式

HTML Markup <div> <div> <h1>1. 用Web控件FileUpload,上传到网站根目录</h1> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="btnUpload" runat="server" Text="Upload" OnC

上传文件的三种方式xhr,ajax和iframe

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .upload { display: inline-block; background-color: #ef4300; cursor: pointer; width: 100px; height: 35

java上传文件常见几种方式

1.ServletFileUpload 表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象 ,在由相应的servlet进行处理.      package com.jws.app.operater.service.impl; import java.io.File; import java.util.HashMap; import java.uti

前端上传文件的方法总结

最近做了阿里云的oss上传,顺便来总结下上传文件的几种主要方法. 第一种:经典的form和input上传. 设置form的aciton为后端页面,enctype="multipart/form-data",type='post' <form action='uploadFile.php' enctype="multipart/form-data" type='post'> <input type='file'> <input type=

Simics虚拟机Solaris 8操作系统获取host 系统win7上的文件的两种方式

1 介绍 本文基于的环境设置如下: ? 宿主操作系统:Windows 7 Ultimate ? 寄生操作系统:Solaris 8 SPARC (SunOS 5.8) ? 虚拟环境:Simics 3.0.4 本文假定已在Simics 上安装好Solaris 8 SPARC 操作系统. 动机:一个Unix下可以运行的二进制文件GraphGen,在单独的一台装有Ubuntu的电脑上不能运行,因为该电脑的硬件架构是基于X86的,而GraphGen是SPARC架构下才能运行的程序:在我的笔记本Win7系统

ASP.NET上传文件的几种方法

//上传文件实例 if (fileDealer.HasFile)//判断文件是否存在        {            string filepath = "";            try            {                string path = fileDealer.FileName;                string filename = path.Split('.')[0] + "_" + DateTime.Now

django中上传文件的三种方式

前端代码: <style> .upload{ display: inline-block;padding: 10px; background-color: brown; position: absolute; top: 0; bottom: 0; right: 0; left: 0; z-index: 90; } .file{ width: 100px;height: 50px;opacity: 0; position: absolute; top: 0; bottom: 0; right:

SpringMVC上传文件的三种解析方式

springMVC上传文件后,在action解析file文件的三种方式. jsp页面的写法: <form action="parserUploadFile1" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit"