前端上传文件的方法有哪些?前端文件上传难度大吗?
最近做了阿里云的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数据会导致浏览器卡顿,服务器端接收这样的数据可能也会出现问题。
相关推荐:
最新新闻:
- 前端上传文件的方法有哪些?前端文件上传难度大吗?
- Tomcat怎么安装配置?tomcat启动不起来的原因
- 笔记本不认硬盘怎么办?笔记本硬盘无法读取怎么修复?
- 今日头条在哪设置字体大小?今日头条查看每日收入的教程
- excel如何添加开发工具到工具栏?excel表格限制行数如何取消?
- hddscan如何进行硬盘扫描检测?磁盘扫描工具的使用方法
- 笔记本硬件故障怎么检测?怎么看笔记本电脑配置?
- 电脑出现报警声是怎么回事?电脑开机时一直响怎么办?
- Win11怎么关闭护眼模式?win11调色温设置方法
- 一键清理垃圾.bat有用吗?一键清理垃圾bat程序教程
- 星际争霸2配置有什么要求?星际争霸2画质怎么调最好?
- 火炬之光2存档位置在哪?火炬之光2共享仓库怎么用?
- 键盘的Ctrl+W是什么?转换输入法用哪个键?
- 每日观点:陕西城固县:在优质服务中锤炼过硬作风
- 环球速讯:五菱缤果5月销量18015辆 环比增长10%
- iPhone 15 系列完成试生产,苹果首批备货量巨大
- 每日资讯:梯橙学堂:剧本杀店加盟——打造属于自己的创业天堂
- 专访金卫东:市场No.1品牌 引领品质与创新
- 2023年6月5日江苏省无水氯化钙价格最新行情预测
- 天天看点:moto razr 40 Ultra 首销破万台,竖向折叠屏为啥受欢迎
- 2023年甘肃省病理医学年会在天水市举行
- 曝天玑9300处理器GPU性能优异 2K测试场景帧率远超苹果A16
- 环球视点!没存在感!科雷布-马丁半场6分钟2中0一分未得 正负值-13
- 环球观热点:淄博双眼皮哪个医院好 这份榜单非常值得收藏
- 6月5日 13:21分 立方数科(300344)股价快速拉升 天天消息
- 东体:阿马杜上半场就已3次补水,申花人员极度不整拼出客场胜利
- 巡逻路遇火情,民辅警秒变“消防员”
- Xbox游戏展会第一方游戏展示均为实机 没有CG
- 科幻变现实 人造电子皮肤亮相:破损后可自行修复
- 左手入局“潮玩”,右手拥抱“AI”,揭秘小黄鸭德盈成长潜力
- 当前热文:《战神3重制版》销量突破400万 系列成为PlayStation最赚钱IP
- 修路盘活撂荒地 团结共享获丰收
- 环球热门:讲真,卫衣下面要少穿裤子,今年流行这样穿,减龄显嫩,值得学习
- 环球微头条丨稳居京东手机竞速榜单第一,联想moto razr 40 Ultra 打造折叠手机全能体验
- 焦点报道:华为版ChatGPT或将于7月7日发布:命名“盘古Chat”
- 环球速看:乘风破浪 勇攀高峰——MongoDB与阿里云携手开启新旅程
- 以政策精准化服务扩内需(记者手记)
- 全球微动态丨【哈曼家影大牌日】JBL旗下多款明星回音壁限时秒杀!
- 世界快消息!壹号本OneXPlayer 2 Pro EVA联名限量版惊艳亮相深圳媒体品鉴会
- 环球今日报丨2023年北京市昌平区民办学校全部名单(含小学/初中)
- 全球速看:我省开展水利重大事故隐患排查整治
- 特发信息:子公司800G光模块在开放联合定制
- 京东开启6.18官方免息活动补报-全球短讯
- 瑞纳智能:以8000万元设立子公司,经营范围涉及工业、专业设计服务
- 大五座SUV市场最强搅局者,新摩卡DHT-PHEV震撼上市,售价23.18万元-天天亮点
- 郑州考生 注意今年高考期间天气变化
- 天天最新:珠峰攀登者放弃登顶花1万美元救起濒死女子 获救者只愿承担4000美元
- 中船租赁参与投资两艘15万吨级大型养殖工船签约
- 恭喜火箭队!快船助教霍奇斯加入教练组,乌度卡喜迎第5位助手 天天头条
- 英诺湖医药完成超亿元 A1 轮融资,加速差异化创新及研发管线推进-世界速递
- 中船租赁参与投资两艘15万吨级大型养殖工船签约
- 恭喜火箭队!快船助教霍奇斯加入教练组,乌度卡喜迎第5位助手 天天头条
- 英诺湖医药完成超亿元 A1 轮融资,加速差异化创新及研发管线推进-世界速递
- 内蒙古自治区签发首份出口菲律宾RCEP原产地证书-全球播资讯
- Leo 仔细观察 MSI 的新笔记本电脑系列 天天快资讯
- 效率提升!《暗黑4》通关后硬核难度可跳过战役-当前速读
- 【全球快播报】《影之刃零》没氪金!皮肤、装备全靠玩法解锁
- 全球消息!玩《最终幻想16》前 IGN发布《最终幻想》游玩顺序推荐
- Win11更新又出问题:键鼠无响应 无法正常玩XGP游戏 环球聚看点
- 小学五年级的教师教学随笔 焦点速读
- 环球快资讯:三十二章
- 【天天时快讯】“我无比确定,读书真的可以改变命运”
- 视讯!小哥来到沃石唱片唐山录音棚,为婚礼唱《霓虹甜心》
- 每日热点:陵水一男子遭遇电信网络诈骗,损失金额29800元
- 当前关注:下周四,北京这些道路将临时管控
- 【天天时快讯】荔枝“大小年”之困已解?
- 刘烈宏:凝聚各方合力 跑出5G发展中国加速度 天天热点评
- 史低价4000多 iPhone 14全系立减1900
- 诺基亚贝尔携“n的力量”焕新亮相PT Expo 2023-看点
- 天天日报丨《暗黑破坏神4》首位100级玩家诞生 肝了54小时
- 大量安卓用户逃离换iPhone,主要原因是这个
- 机关枪使用(机关枪传教士)
- com surrogate已停止工作是何原因?com surrogate已停止工作64位的解决办法
- 【全球播资讯】明天出坞!我国首艘国产大型邮轮“爱达·魔都”内部实拍:可容纳5246人
- 键盘平方米符号怎么打m2?电脑输入平方米符号教程
- kvm切换器有什么用? kvm切换器是干什么用的?
- 全球今热点:轩岗煤电公司焦家寨矿:不断创新宣教方式提升安全责任意识
- 笔记本功率一般多大?怎么查看电脑的功率?
- 网络布线走线的正确方法 家里的网线是如何布线的?
- window11怎么去掉快捷方式箭头?windows11去除小箭头教程
- 显卡更新怎么弄?显卡驱动有必要更新吗?
- 口袋海贼王怎么玩?海贼王为什么改名航海王?
- qq空间进入时的页面怎么设置?QQ空间访问权限在哪里设置?
- 魔兽世界付费转服多少钱?原神角色能升多少级?
- 西普大陆是什么游戏?怎么设置所有人一键喊话?