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

2023-11-01

首先我是用的是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,所以传了一下午愣是没传过去,真是好气啊啊啊啊,也是因为我刚来公司,对大家的编码习惯都不清楚,哈哈,以后这些地方得注意多多熟悉了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

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

    首先我是用的是uniapp框架 所以以下内容皆以此未前提 我是第一次用uniapp 所以有些地方也不太熟悉 比如在写h5时 页面上的input的type写成file时页面上没有效果 查看官方文档后知道 需要使用js 插入一个input标签
  • H5 架构和原生架构的区别

    1 App 的 3 种开发方式 表面上看 手机 App 都是同样的东西 就是手机上的应用程序 点击图标就能运行 但是它们的底层技术不一样 按照开发技术 App 可以分成三大类 原生应用 简称 nativeApp Web 应用 简称 WebA
  • 移动端安卓文字垂直居中偏上偏移的解决方案

    移动web里小于12px的文字居中异常的问题 最后还是改为12px才近乎解决了问题 但是有时候或许并不是那么乐观 你并不能将原本定为10px的字体改为12px 那该怎么办呢 我们都知道 移动端为了高清屏显示1px的border 会有那么几种
  • 记录一下项目踩到的一些坑(不断更新)

    1 HTTPS 问题排查 相信大家PHP在做第三接口或者一些接口调用的时候都会用到curl 在本地部署开发没问题 但是部署到正式服务器的时候就会导致返回一些无知错误 解决方案排查 可以考虑一下是否在curl 的时候做了HTTPS的校验 2
  • pycharm IDE报错 ,记事本打开后出现卡顿,之后出现ide错误

    打开IDE之后进行编辑 点击setting出现页面无反应 右下角出现的提示 ide error occurred see detail submit display 点击进去之后 在点击这个display 类似重启IDE的命令 然后就可以继
  • 最近学到的一些前端知识

    在Vue中使用v for不仅可以遍历数组 还可以遍历对象 当然也可以遍历字符串 还有在Vue中 不可以深度监听数组的变化 比如将数组arr某一项的值改变 在视图上不会发生变化 在网上找了很多方法 包括Vue set 原对象 位置 值 以及v
  • 【H5】阻止H5页面播放视频默认全屏

    老是看到有人找不到阻止视频默认全屏的问题 看到别人发的帖子不是隐藏video标签使用canvas绘制视频就是使用插件来禁止视频默认全屏的问题 其实没有那么麻烦的只需要设置一下属性就可以了 x5 playsinline true 安卓需要设置
  • 本地上传文件到github报错

    rejected master gt master non fast forward error failed to push some refs to https github com linanyways myProject git h
  • 微信小程序嵌入 H5 页面(web-view)

    在开发微信小程序的时候 我们有时候会遇到将 H5 页面嵌入到小程序页面中的情况 微信小程序自带的 web view 组件相当于 HTML 页面中的 iframe 方便我们在微信小程序中打开一个 H5 页面 官网描述 承载网页的容器 会自动铺
  • uniapp canvas绘图

    问题描述 根据项目需求 将商品的图片 用户头像 二维码 商品信息绘制到分享海报中 效果展示 参数介绍 参数 类型 说明 avatarImg String 头像图片 bgImg String 背景图片 qrImg String 二维码 goo
  • 申请苹果开发者账号的方法

    1 打开苹果id注册地址 输入相关信息注册 如果已经有苹果账号了看第二步 https appleid apple com account localang zh CN 2 注册成功了 或者有苹果账号了 登录苹果开发者中心 https dev
  • Windos10专业版开启远程桌面协助

    我需要控制局域网的电脑 这台电脑是win10专业版 搜索 远程桌面设置 进入后启动远程桌面设置 然后发现当前用户已经有访问权 当前用户没有密码 那么远程失败 解决方法是 按win r 输入GPEDIT MSC 计算机配置 gt 安全设置 g
  • win10远程桌面的坑

    win10的远程桌面的确是清晰度非常好 操作非常流程的 但是还是有坑的 举两个踩坑例子 1 录屏软件在远程桌面退出后无效了 无法录制屏幕了 2 监控客户端在退出远程桌面后 再进去远程桌面 打圈圈卡死 因此一些应用不适合在win10远程桌面办
  • 前端面试题(一)

    目录 一 解答题 1 样式表以及选择器的优先级 权重 2 浮动特点 3 元素 标签 类型的分类 4 水平垂直居中方法集锦 5 定位模式和定位的特点 6 画个三角形 7 BFC 块级格式化上下文 的特点和触发规则 8 宽高自适应 9 什么是高
  • uniapp 中父组件调用子组件方法

    需求描述 随着开发的深入和代码的维护 为了某些功能的实现可以说是又秃了几根 接下来就说一说 通过 ref 实现父组件调用子组件的方法等 1 父组件模板 在父级模块的子组件上添加属性 ref 和 属性名 mySon 随意 调用时使用 this
  • vue调用原生方法交互

    目前在做一个H5应用 需要调用原生方法进行交互 特此做一个记录 技术栈 vue版本2 6 vant版本 2 12 第一步 声明一个rpcFn js文件 进行原生交互阿里桥封装 const rpc function url params re
  • uni-app request回调函数内无法使用this.

    微信小程序开发中 通常会在 request成功的回调函数中修改本地的属性 如果直接使用this 会有类似的提示无法修改 gt Cannot set property xxx of undefined at api request succe
  • iOS证书(.p12)和描述文件(.mobileprovision)申请

    我们在做uniapp开发的时候 打包ios应用需要自有证书 而自有证书包含 p12和 mobileprovision这两个跟证书有关的文件 但是uniapp官方的教程 却是需要使用苹果mac系统去申请 假如没有mac电脑 则它的教程就没有参
  • 使用h5标签需要兼容,不使用没有标签进行语义化,如何取舍?兼容IE6,7,8,canvas,video

    HTML5已向开发人员提供了很多新的标签 如section nav article header和footer等 这些标签语义化程度高 会被经常使用 但在IE6 IE7 IE8和Firefox 2等老式浏览器中却不能识别和正常使用 很多浏览
  • react 父组件调用子组件的方法

    子组件中 const child forwardRef props ref gt useImperativeHandle ref gt 这里面的方法是暴露给父组件的 test console log 我是组件里的test方法 test2 t

随机推荐

  • uniapp运行到小程序之无法启动

    创建了一个uniapp项目 要求是在H5以及小程序都可运行 H5端很容易实现 那么我们来一起探讨小程序遇到的问题 首先 HbuilderX运行到微信小程序 前提是要安装微信开发者工具 来模拟手机上的小程序情景 运行报错 原因是微信小程序工具
  • 国产WMS仓库管理系统排名

    导读 WMS仓库管理系统是通过入库业务 出库业务 仓库调拨 库存调拨和虚仓管理等功能 对批次管理 物料对应 库存盘点 质检管理 虚仓管理和即时库存管理等功能综合运用的管理系统 可以有效控制并跟踪仓库业务的物流及成本管理的全过程 实现或完善企
  • 学习笔记 JavaScript ES6 Webpack核心概念

    学习内容 入口 entry 出口 output Loader 插件 plugin 模式 mode ES6 新特性的语法是无法被浏览器所识别的 浏览器只能识别ES5的语法 所以ES6 需要使用一个工具 把语法转化为ES5的语法 这个工具就是B
  • MyBatis3框架详解(四)

    一 select元素 select标签元素是用来定义查询操作的 id属性 唯一标识符 用来引用这条语句 需要和接口的方法名一致 parameterType属性 参数类型 可以不传 mybatis会根据TypeHandler自动推断 resu
  • 计算机网络3—网络层

    IP报文的格式和各个字段的含义 掌握IP分片 如何避免IP分片 在应用层做限制 在传输层做限制 如何确定分片顺序 接收端如何确定所有分片都到了 IP线路 路由表 路由表每个字段的含义 ICMP协议 查询 报错 ICMP协议的层次和作用 IC
  • java异常NoClassDefFoundError

    这个问题错误原因众多 如下是我在解析数据时遇到的问题并附上解决方法 遇到这样的问题 java lang ClassNotFoundException serialization Serializer 提示没有找到定义的Class 查看各个文
  • win下安装nextcloud_在 Windows 平台下搭建docker - nextCloud 个人云盘

    一直感觉放在百度网盘里面的数据很不安全 因为之前因为存一些技术教程被封过号 再也没活过来 正巧赶上盘当劳事件 手里还有闲置硬件资源 终于下定决心自己搭建一个 NAS 来用了 先挂载到本地磁盘中 因为我们不想因为存储的数据随着容器的删除而消失
  • 机器学习之数据准备

    1 数据预处理的理由 在开始训练机器学习的模型之前 需要对数据进行预处理 这是一个必须的过程 不同算法对数据有不同的假设 需要按照不同的方式转换数据 这样做的目的是为了提高模型的准确度 2 数据转换的方法 调整数据尺度 正态化数据 二值数据
  • oracle libcpt ora,Oracle12c R2注意事项: Active DataGuard logon fail with ORA-00604& ORA-04024

    这是一套12c R2 4 nodes Oracle RAC on RHEL 7的环境 已安装0417 RU 该库有一套Phyical DataGard 同时也是GoldenGate的target端 存在一个replicat 进程同步数据 一
  • C++类模板

    类模板和函数模板语法相似 在声明模板template后面加类 此类称为类模板 类模板作用 建立一个通用类 类中的成员 数据类型可以不具体制定 用一个虚拟的类型来代表 语法 template
  • scanner hasnext方法的结束输入

    先看一段经典的程序 import java util Scanner public class aplusb public static void main String args Scanner in new Scanner System
  • ubuntu 18.04 中 编译 FasterTransformer,与缺少安装包

    前提 A100 cuda 11 6 cudnn8 nccl zlib1g dev git clone recursive https github com NVIDIA FasterTransformer git git submodule
  • 【转】svn详解

    转自 svn status详解 世界 太精彩 博客园 svn 是在提交前查看本地文本和版本库里面的文件的区别 返回值有许多种具体含义如下 L abc c svn已经在 svn目录锁定了abc c M bar c bar c的内容已经在本地修
  • python+pyqt5设置窗体图标和任务栏图标及窗体标题的方法

    本次设置窗体标题只用了一种方法 在进行窗体实例化后window Window 使用setWindowTitle str 命令 在主程序中的设置命令如下所示 if name main QApplication setAttribute Qt
  • lab4

    这一个lab主要学习进程管理和进程通讯 come on 好好学习 PART A 多处理器支持 Exercise 1 void mmio map region physaddr t pa size t size Where to start
  • 18虚幻4【UE4】 中场景中的N个actor赋予随机颜色

    问题 现在1000个静态网格体要附上随机颜色的材质 难道我们要写1000中材质 然后附上去吗 一 思路 获取场景中物体 创建材质实例 修改材质参数 通过get actors with tag也好 通过get actors of class也
  • 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序

    51单片机 IIC OLED屏幕驱动 Proteus仿真 实物验证示例程序 Proteus仿真效果 注意点击运行仿真后 图像刷新出来比较慢 示例主程序 include REG51 h include oled h include bmp h
  • QT获取mysql数据库驱动步骤记录-版本QT_5.12.5-附精华链接

    首先先检查自己的QT已经加载的数据库版本 qDebug lt
  • ARM架构的外部中断介绍(S5PV210芯片)

    1 外部中断介绍 1 中断源的划分 内部中断和外部中断 所谓内部中断和外部中断 是根据中断源来自Soc内部还是外部 1 比如串口 定时器等都是Soc内部自带的 所以触发的中断都是内部中断 2 给Soc外接一个烟雾报警器 通过GPIO引脚和S
  • 关于移动端H5使用xhr上传文件

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