前端上传文件的方法有哪些?前端获取本地文件路径

来源:中网时间:2023-01-06 14:25:08

最近做了阿里云的oss上传,顺便来总结下上传文件的几种主要方法。

第一种:经典的form和input上传。

设置form的aciton为后端页面,enctype="multipart/form-data",type=‘post’

提交

使用input选择文件,设置好其他input的值,点击提交,将文件数据及签名等认证信息发送到form设置的action对应的页面,浏览器也会跳转到该页面。触发form表单提交数据的方式有2种,一种是在页面上点击button按钮或按钮触发,第二种是在js中执行form.submit()方法。

优点:使用简单方便,兼容性好,基本所有浏览器都支持。

缺点:1. 提交数据后页面会跳转(下面会讲如何禁止页面跳转)。

2.因为是浏览器发起的请求,不是一个ajax,所以前端无法知道什么时候上传结束。

3. form表单里发送除文件外的数据,一般是新建一个type=hidden的input,value=‘需要传的数据’,每发送一个数据就需要一个input,一旦多了就会使得dom看起来比较冗余。

小技巧:

form表单提交数据后会自动跳转到action指定的页面,为了禁止页面跳转,可以在页面中新建一个空的ifame,比如name='upload',然后设置form的target="Uploader",form有一个target的属性,规定在何处打开action,这样form提交数据后就会仍停留在当前页。代码如下:

提交

这样写的另一个好处是,可以知道什么时候上传完成并接收到后端的回调结果。比如上面这个例子,文件数据发送到了 'uploadFile.php',假设该页面处理完数据后返回了一个地址,该地址会被写入到之前的iframe中。所以在ifame的onload函数触发时,也就是上传完成后,可以在iframe中读取到后端返回的数据。

var iframe = document.getElementById('upload1');

iframe.onload = function () {

var doc = window.frames['uploader1'].document;

var pre = doc.getElementsByTagName('pre');

var obj = JSON.parse(pre[0].innerHTML);

}

使用这种方法时需要注意,iframe有跨域限制,创建出来的iframe的地址如果和当前页面地址不同源,会报错。这种情况下,建议大家在iframe的onload函数中,再次向后端请求一个接口获取文件地址,而不是直接去iframe里读取。或者返回这样的数据。

window.top.window[callback](data)

callback是和前端约定好的名字,上传完成后触发该函数并返回后端数据。

第二种:使用formData上传。

用js构造form表单的数据,简单高效,但最低只兼容IE10,所以需要兼容IE9的童鞋们就略过这个方法吧。

html:

js:

var formData = new FormData();

formData.append("userid", userid);

formData.append("signature", signature);

formData.append("file", file); //file是blob数据

//再用ajax发送formData到服务器即可,注意一定要是post方式上传

说明:第一种方法提到了创建多个type=‘hidden’的input来发送签名数据,这儿可以用formData.append方法来代替该操作,避免了dom中有多个input的情况出现。最后将file数据也append到formData发送到服务器即可完成上传。

优点:由于这种方式是ajax上传,可以准确知道什么时候上传完成,也可以方便地接收到回调数据。

缺点:兼容性差

第三种:使用fileReader读取文件数据进行上传。

HTML5的新api,兼容性也不是特别好,只兼容到了IE10。

var fr = new FileReader();

fr.readAsDataURL(file);

fr.onload = function (event) {

var data= event.target.result; //此处获得的data是base64格式的数据

img.src = data;

ajax(url,{data} ,function(){})

}

上面获得的data可以用来实现图片上传前的本地预览,也可以用来发送base64数据给后端然后返回该数据块对应的地址。

优点:同第二种

缺点:一次性发送大量的base64数据会导致浏览器卡顿,服务器端接收这样的数据可能也会出现问题。

关键词: 前端上传文件的方法有哪些 前端上传文件的方法总结 前端文件上传怎么实现 前端获取本地文件路径 前端文件上传难度大吗

相关阅读

推荐阅读

一个人越来越强大的迹象:稳-天天报资讯

【来源:唐山市人民检察院】声明:转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请作者持权属证明发至邮箱newme更多

2023-01-06 13:57:00

全球视点!烟台高新区一年出四“策”筑巢引凤

胶东在线1月6日讯(记者鞠平)区域高质量发展,产业高质量增长,企业高质量成长……都离不开高质量的投资和人才。这个道理,烟台高新区很明白更多

2023-01-06 13:36:31

今日热文:单位提出续签劳动合同,劳动者不同意时

每天上一课轻松学政策莫先生3年前与一家文化传媒公司签订劳动合同,担任会展策划。近日,莫先生的合同到期,单位维持了原有劳动合同约定条件提更多

2023-01-06 12:42:13

「原创」云岭论坛:申遗成功后还需认识升级

作者雷桐苏近期,随着 "中国传统制茶技艺及其相关习俗 "申遗成功,至此,我国已经共有43项世界级非遗,位居世界第一。这给诸多正在申遗路上努更多

2023-01-06 11:50:06

旭辉集团拟发行20亿元中期票据

1月3日,旭辉集团拟发行2023年度第一期中期票据。据悉,该期债券发行规模不超过20亿元,3年期,由中债信用增进提供全额无条件不可撤销连带责任更多

2023-01-06 11:51:17

宁津:全力推动高质量发展创造高品质生活

宁津县新城智谷智造基地项目以生产智造平台+智能研发平台、企业孵化平台、研发成果转换平台为核心,逐步打造形成医疗健康产业聚集区。高品质生更多

2023-01-06 11:35:54

观点:去年1月至11月安徽快递业务量累计完成31.9

记者1月5日从省统计局获悉,2022年1月至11月,全省快递业务量累计完成31 9亿件,同比增长13 0%;实现业务收入215 2亿元,增长9 2%,快递业务收更多

2023-01-06 10:59:33

2022年温企在A股市场的六个“最”:世界报道

温州网讯2022年温州企业在A股市场创造了自己的历史。先后有万控智造、源飞宠物、欣灵电气、东南电子、炜冈科技、珠城科技、通力科技等7家温州更多

2023-01-06 10:59:59
    2022年三季报披露后,北京商报记者根据企业公告选取了30家上市房...
    首套房公积金利率下调原来贷款也下调吗首套房公积金利率下调原来...
    政府回购商品房意味着什么政府收购商品房的首要目的是稳定市场。...
    把自己房子卖了再买算首套房吗买过一套房卖了再买算首套房。简单...
    买房交首付注意事项有哪些1、核实开发商五证。在交首付时,需要先...
    房屋契税征收比例契税税率的缴纳一般分为以下几种情况:1、面积小...

Copyright   2015-2022 当代财经网  www.ddcjw.cn 版权所有  备案号:京ICP备2021034106号-19  联系邮箱:55 16 53 8 @qq.com