关于移动端H5使用xhr上传文件

前端实现图片压缩上传功能 以移动端为例,在H5上传图片时,由于机型 / 网速 / 流量等限制,在低版本机型上经常会出现上传的图片太大导致上传很慢甚至崩溃的情况,所以需要对在某些情况下需要对上传的图片进行压缩上传。 以下以移动端使用Vue框架为例: (以下主要实现思路来自张鑫旭大神的博客: 阅读详情

首先我是用的是uniapp框架,所以以下内容皆以此未前提
我是第一次用uniapp,所以有些地方也不太熟悉,比如在写h5时,页面上的input的type写成file时页面上没有效果,
查看官方文档后知道,需要使用js 插入一个input标签,并用一个点击事件触发它的点击事件,话不多说,上代码

            // 上传文件
            add_file() {
                var input = document.createElement('input')
                input.type = 'file'
                input.style.display = 'none'
                input.id = 'file'
                this.$refs.inputlw.$el.appendChild(input);
                input.onchange = (event) => {
                    this.fileinfo = event.target.files[0]  //这是我用来存储文件信息的,可删
                    this.upload(event)
                }
            },

 

这是初始化页面的时候调用的方法

下面是点击事件


            click() {
                return document.getElementById("file").click();
            },

 

这就触发了这个input的点击事件,之后如果你上传文件就进入这个input的onchange事件中

之后下一步就是调用核心上传方法

            // 上传核心方法
            upload(event){
                let _file = event.target.files[0];
                let formData = new FormData();
                // HTML 文件类型input,由用户选择
                formData.append("file", _file);  //这里的file只是后台接收时的名字,可自行与后台沟通
                let xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
                xhr.open("post", "这里是你的上传地址", true);
                 //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
                //请求完成
                xhr.onload = (res) => {
                    //这里就是上传完成后的事件,我这里将响应值转为json格式方便取值
                    this.form.url = JSON.parse(res.target.response).url;
                };
                //上传开始执行方法
                xhr.upload.onloadstart = () => { 
                    this.$.show('上传中...');
                };
                xhr.upload.onprogress = (res) => {
                    if(res.loaded / res.total == 1){
                        setTimeout(()=>{
                            this.$.hide()
                        },5000)
                    }
                    // res.total是需要传输的总字节,res.loaded是已经传输的字节。
                    // 如果res.lengthComputable不为真,则res.total等于0
                };
                //请求失败
                xhr.onerror = (data) => {
                    this.$.hide()
                    this.$.ti_shi('上传失败')
                };
                xhr.ontimeout = function(event) {
                    this.$.hide()
                    this.$.ti_shi('上传超时,请刷新重试')
                }
                xhr.send(formData);
            },

 

上面代码中的show,hide ,tishi 这些方法都是自己本地封装的方法,方便调用而已,大家可以换成自己的方法

我在这个问题上遇到的坑就是在向后台传文件时,因为名字写为了 file,但是后台那边不管什么文件,取值时一律用的img,所以传了一下午愣是没传过去,真是好气啊啊啊啊,也是因为我刚来公司,对大家的编码习惯都不清楚,哈哈,以后这些地方得注意多多熟悉了

华为交换机与思科/华三设备LACP对接实战:手把手教你配置链路聚合 本文详细解析了华为交换机与思科、华三设备间的LACP链路聚合配置实战,涵盖核心原理、配置步骤及排错技巧。通过对比不同厂商的实现差异,提供可落地的跨厂商对接方案,助力企业网络工程师高效部署高可靠性链路聚合。 阅读详情

相关推荐

PCIe信号眼图总是不开?手把手教你调CTLE和DFE参数(附实测波形对比)

本文详细解析了PCIe信号眼图调试中CTLE和DFE参数的优化方法,帮助硬件工程师解决眼图无法张开的问题。通过实际案例和步骤指导,介绍了如何调整CTLE直流增益和DFE抽头系数,提升接收端均衡器性能,确保信号完整性。

weixin_26805597的博客 209

通过xhr实现文件上传功能,使用jQuery实现文件上传功能

通过xhr实现文件上传功能,使用jQuery实现文件上传功能

背心的博客 2083

短视频mssdk中get_token协议逆向与加密流程深度解析

本文深度解析了短视频mssdk中get_token协议的逆向分析与加密流程。通过抓包、Frida Hook、静态分析等手段,详细拆解了协议数据的Protobuf结构、设备信息采集来源,并重点剖析了其核心加密链路:zlib压缩、自定义TEA算法与AES-CBC加密,最终实现完整的协议模拟。

flower的专栏 539

使用原生xhr实现上传文件功能

上传文件 新版 XMLHttpRequest 对象,不仅可以发送文本信息,还可以上传文件。 实现步骤: ① 定义 UI 结构 ② 验证是否选择了文件 ③ 向 FormData 中追加文件 ④ 使用 xhr 发起上传文件的请求 ⑤ 监听 onreadystatechange 事件 定义UI结构 <!-- 1. 文件选择框 --> <input type="file" id="file1" /> <!-- 2. 上传按钮 --> <button id="btnU

咖啡壶的博客 3861

/lib//libclntsh.so: file format not recognized; treating as linker script

centos7.7+oracle19.3 建库过程报错:预检查都是通过的 /oracle/product/19.3.0/db_1/lib/libasmperl19.a -Wl,--no-whole-archive -lclntsh -lclntshcore -lasmclntsh19 -lhasgen19 -lskgxp19 -locr19 -lcell19 -lirc INFO: /usr/bin/ld:/home/app/oracle/product/19.3.0/db_1/li...

sqlora的专栏 9907

在 Linux/Debian/Ubuntu 上使用 Brasero 刻录光盘

在 Ubuntu 系统中,Brasero 是一个非常方便的光盘刻录工具。无论是创建数据光盘、音频光盘还是刻录光盘镜像文件,Brasero 都能轻松胜任。本文将介绍如何在 Ubuntu 上安装和使用 Brasero 进行光盘刻录。

I AM COMING BACK... 3539

利用FormData对象 + XHR 新特性实现文件上传——带进度条

小编今天又get到一个新技能,就是上传图片并显示进度条,话不多说,直接进入正题!冲冲冲!!???? 实现效果: 当点击上传文件按钮后,如果未选择文件,会跳出请选择要上传的文件提示框,反之,会有一个上传图片的进度条显示,当上传完成后,图片也会对应的显示在页面中. 实现步骤: ① 定义UI 结构 ② 验证是否选择了文件 ③ 向 FormData 中追加文件 ④ 使用 xhr 发起上传文件的请求 ⑤ 监听 onreadystatechange请求 ⑥ 显示文件上传进度 ...

可爱不能当饭吃 2927

FISCO-BCOS配置及使用控制台

如果因为网络问题长时间无法下载,请尝试:curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh。为了可以更加方便快捷,所以HelloWorld合约已经被内置了,位于控制台下面的contracts/solidity/HelloWorld.sol。用于获取和设置name的值,合约代码如下。部署成功会返回合约地址。

qq_51562644的博客 821

使用XHR上传文件要不要了解一下?

上传文件 我们通过File API 能够访问到文件内容,然后把文件内容放到send()方法中,再通过POST请求,的确很容易就能实现上传。但这样做传递的是文件内容,因而服务器还得收集提交的内容,然后保存到另外一个文件中。其实,更好的做法是以表单提交方式来上传文件。 表单方式上传?没错!formData类型做这个很容易,分分钟几千万上下啦。 首先,要创建一个FormData对象,通过它调用appe...

kk 938

面向干净核心的并行扩展:SAP BTP 上的 side-by-side extensions 全面解读

摘要: SAP的side-by-side extensions是一种与核心系统解耦的云原生扩展模式,通过API和事件驱动实现与SAP S/4HANA等核心系统的松耦合集成。该模式支持独立升级、弹性扩展和高效创新,是SAP官方推荐的clean core关键实现路径。其典型架构包括接口层(OData/REST API、事件通道)、运行层(Cloud Foundry/Kyma/CAP框架)和体验层(Fiori/UI5)。适用场景包括需快速迭代、复用云服务或服务外部用户的业务扩展。实施时需关注安全治理(如XSUAA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 296

【WRF-Chem】预处理工具(Preprocessors)总结

预处理工具(Preprocessors)总结

WW、forever的博客 1175

43 Ajax xhr请求 数据交换格式json 封装ajax函数 FormData 上传进度条 axios发起请求

目标 能够知道如何使用XMLHttpRequest发起Ajax请求 能够知道如何封装自己的Ajax函数 能够使用XMLHttpRequest Level2中提供的新特性 能够知道jQuery中如何实现文件上传与loading效果 能够知道如何使用axios发起Ajax请求 XMLHttpRequest的基本使用 什么XMLHttpRequest XMLHttpRequest(简称 xhr)是浏览器提供的 Javascript 对象,通过它,可以请求服务器上的数据资源。之 前所学的 jQuery 中的 A

Write less,do more 776

Spec Kit:GitHub 官方推出的规范驱动开发工具包,让 AI 编程真正可控、高效、高质量

先明确“做什么”和“为什么”,再考虑“如何做”。它通过一系列标准化命令(如/specify/plan/implement可验证的功能规格(spec)可执行的技术方案(plan)可追溯的开发任务(tasks)高质量的实现代码(code)最终实现“规范即代码,代码即规范”的闭环。📌项目地址许可证:MIT(完全开源,欢迎贡献)Spec Kit 代表了 GitHub 对AI 原生开发(AI-Native Development)AI 不应替代开发者,而应放大开发者的意图。

lpfasd123的博客 1695

h5如何上传文件二进制流_h5上传文件的方法

h5上传文件的方法:H5标签提供了原生的 input[type=file] 标签支持文件上传功能。类似于表单提交,文件上传有两种,同步和异步,同步无法获得上传工程中的进度,异步是采用ajax方式上传,实时获得上传进度等信息。异步上传文件,文件编码格式采用 multipart/form-data (https://segmentfault.com/a/1190000008791342#arti...

weixin_32258919的博客 950

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

移动端H5图片上传的那些坑

原文出处:http://www.tuicool.com/articles/FZRZzea 上周做一个关于移动端图片压缩上传的功能。期间踩了几个坑,在此总结下。 大体的思路是,部分API的兼容性请参照caniuse: 利用FileReader,读取blob对象,或者是file对象,将图片转化为data uri的形式。使用canvas,在页面上新建一个画布,利用can

chelen_jak的专栏 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

H5拍照上传填坑汇总

前言 最近工作一直在使用vue+vux做移动端项目,有一个拍照上传照片的需求,发现vux里并没有实现,调研过非官方的vux-uploader后,感觉还不是很理想。 其实网上已经可以找到很多已经实现的成熟方案,但是在调研这个需求的时候,我发现在各种实现方案中也有一些puzzle的知识点,因此自己动手撸了一个轮子vux-uploader-component,并记录一二。 需求 组件的交互功能要求如下:...

weixin_34194702的博客 1426

uni-app 选择和上传非图像、视频文件

首先小程序端不支持上传非图像视频文件。 然后App和H5端,参考:https://uniapp.dcloud.io/api/media/file H5端在2.9.9以前,可以使用如下方法: 使用web-view组件 使用web-view 组件,在 web-view 组件内可以使用 input 元素进行选择,使用表单或者 xhr 上传。 使用 js 创建 input 元素进行选择 使用 xhr 上传(或者转 base64、Object-URL 使用 uni.uploadFile 上..

deary 1990

java后台 移动端 h5 播放m3u8

1.知识点 m3u8 m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成。目前 由 Apple.inc 率先提出的 HLS 协议在 Mac 的 Safari 上原生支持,你可以直接通过 video.src = ‘xxx.m3u8’ 来实现。 如果你希望兼容所有的浏览器的话, 你需要知道 Chrome 和 F...

博水之野,人杰地灵 8145

angularJS+Ionic移动端图片上传的解决办法

前端开发中经常会碰到图片上传的问题,网上的解决办法很多,可是有些图片上传的插件会有一些附属的插件,因此因为一个图片上传的问题可能额需要引入其他插件到项目中,久而久之项目会不伦不类,有时候插件之间也会有一些冲突,所以我们可以自己写一个图片上传的方法。 今天的demo是帮朋友做的一个移动端微信公众号项目,项目架构采用angular+ionic,因为对dom的操作jQuery会方便很多...

aoque0611的博客 274

2020-08-05 html的音频加载 + css的负值margin与inline-block + JS的批量上传文件的组件 + 软技能的本机地址

2020-08-05 题目来源:http://www.h-camel.com/index.html [html] 在H5中如何预加载音频? H5新增Audio对象,移动端h5的实现可以参考 https://www.cnblogs.com/leinov/p/3896772.html 最简单:<audio id="myAudio" src="img/RiverFlowsInYou.mp3" autoplay controls loop></audio>//自动播放,显示控件,循环.

在下魔王ii的博客 561

H5上传图片,利用XMLHttpRequest传输数据进度监听不到的解决方法

今天用H5上传图片,利用XMLHttpRequest对象来传输数据,想在界面上监听上传的进度,出现了IOS机子进度显示正常,而Android机子和IE上都不能监听到,解决办法如下: xhr.upload.onprogress = uploading;//上传进度调用方法实现 xhr.send(form); //xhr.upload.addEventListener("pr...

281

为什么h5上传服务器只显示图片,【Web前端问题】怎么把图片从前端上传到服务器?...

遇到一个需求,就是需要把图片传给后台数据库,然后前端再读取数据库图片,有人说base64,请问一下base64是怎么上传的?前端把图片转为base64数据,传给后台,然后后台保存base64,之后前端读取的时候再解析base64?是这样理解的吗?还有其他方法吗?前端用的是react,后台是java回答:可以使用 FormData ,其属于 XHR Level 2 中内容。文件可以使用 input:...

weixin_32666933的博客 417

使用HTML5 FILE API上传图片移动端缩略图兼容问题

主要是解决某些浏览器存在base64编码显示不出图片来的问题

wuweitiandian的专栏 4510

uni-app多端文件下载保存方案:H5与小程序进度条实现与封装

文件下载与本地存储是移动应用开发中的基础功能,其核心原理是通过网络请求获取服务器资源并持久化到设备。在混合开发场景下,由于不同平台(如H5浏览器与微信小程序)的底层API与权限模型存在显著差异,实现一套统一、流畅的下载体验面临诸多挑战。H5端主要依赖XMLHttpRequest或Fetch API进行网络请求,并通过Blob对象处理二进制数据,但其文件系统访问权限受限;微信小程序则提供了wx.downloadFile等原生API,能力更强但受限于域名白名单。从技术价值看,一套封装良好的多端下载方案能显著提升

cmff98425的博客 394

无刷新上传图片 可以实时预览 选择图片后即自动上传_基于业务场景下的图片/文件上传方案总结...

精彩回顾如何实现H5可视化编辑器的实时预览和真机扫码预览功能在线IDE开发入门之从零实现一个在线代码编辑器基于React+Koa实现一个h5页面可视化编辑器-DooringTS核心知识点总结及项目实战案例分析前言图片/文件上传组是企业项目开发中必不可少的环节之一, 但凡涉及到用户模块的都会有图片/文件上传需求, 在很多第三方组件库(ant desigin,element ui)中它也是...

weixin_32019949的博客 595
上一篇: 关于在VUE中使用html2canvas+jspdf方案将HTML页面导出为PDF遇到的坑
下一篇: 20190929哈啰出行前端投递笔试总结
Cirzearchenille
博客等级 码龄10年 30粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值