关于移动端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上传文件 的相关文章

  • MUI蓝牙打印(Android)

    MUI蓝牙打印 Android 使用MUI开发手机APP时使用蓝牙打印功能可能较少使用 MUI官方并为集成蓝牙打印功能 而且似乎对iPhone蓝牙打印的类库支持也不够完善 忙完一阶段后回顾下之前的工作 想想蓝牙打印功能折腾了够长时间了 写这
  • H5 架构和原生架构的区别

    1 App 的 3 种开发方式 表面上看 手机 App 都是同样的东西 就是手机上的应用程序 点击图标就能运行 但是它们的底层技术不一样 按照开发技术 App 可以分成三大类 原生应用 简称 nativeApp Web 应用 简称 WebA
  • MultipartFile中transferTo(File file)的路径问题

    今天看到layui的文件上传的控件 就尝试了一下 简单创建了一个SpringMVC项目 记得在配置文件中注入以下Bean
  • Robot Framework 关于上传文件的问题的简单解决

    使用关键字选择文件 使用方式就是 解释一下 这里的xpath的 是输入标签的xpath的 而大多数的网络上传文件都会有这个输入标签 下边看几个简单的例子 本地上传按钮点开之后会弹出窗口选择文件 我们只需要获取这个本地上传的
  • 完美解决移动端滚屏问题

    背景 移动端开发有弹出框时 下面页面还是可以滚动 本身也不是问题 但是有时候需要弹框出现 底部禁止滚动 如果需要 以下代码可以帮你实现效果 在需要弹窗的代码里 调用stopBodyScroll true 在关闭弹窗代码里 调用stopBod
  • 移动端安卓文字垂直居中偏上偏移的解决方案

    移动web里小于12px的文字居中异常的问题 最后还是改为12px才近乎解决了问题 但是有时候或许并不是那么乐观 你并不能将原本定为10px的字体改为12px 那该怎么办呢 我们都知道 移动端为了高清屏显示1px的border 会有那么几种
  • 使用 Visual Studio 2022 写纯32位汇编(intel风格)

    文章目录 第0步 打开VS 2022 点击创建新项目 第1步 选择windows 桌面向导 第2步 配置项目 第3步 选择空项目 第4步 找到生成依赖项 选择生成自定义 第5步 勾选masm 第6步 新建文件 第7步 选择cpp文件并在下方
  • 本地上传文件到github报错

    rejected master gt master non fast forward error failed to push some refs to https github com linanyways myProject git h
  • ios私钥证书的创建方法

    ios私钥证书是苹果公司为ios开发者打包app 推出的一种数字证书 只有同一个苹果开发者账号生成的ios私钥证书打的包 才能上架同一个开发者账号的app store 因此不要指望别人给你共享私钥证书和描述文件 因为别人的证书和描述文件打的
  • 前端实现换肤功能

    项目背景 由于项目要求 需要前端对不同的企业用户展示不一样的颜色 也就是简单的更改肤色 本来使用前端框架会很容易解决 但是公司目前的架构不是很好 前后端分离也没有那么彻底 web工程还是搭配jsp 没办法 只好用最纯粹的css来实现换肤要求
  • antDv 级联选择器(a-cascader)通过接口动态加载数据

    每次子选择器的内容都是通过将父级id传给接口获取到 最终保存到data中参数selectItem格式为 xxx xx x
  • Windos10专业版开启远程桌面协助

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

    postcss px to viewport 8 plugin 适配 简述 postcss px to viewport 8 plugin 是一个PostCSS插件 用于将以像素为单位的样式转换为视口单位 如vw vh 的样式 实现移动端适
  • 关于在VUE中使用html2canvas+jspdf方案将HTML页面导出为PDF遇到的坑

    首先网上有很多教程 我就简单记录下 主要是记录我遇到的问题 首先 npm install html2canvas jspdf s 然后在main js中引入 引入html转pdf的js import htmlToPdf from asset
  • U盘安装CentOS7

    官网找到CentOS7的ISO镜像 CentOS 7 x86 64 DVD 2207 02 iso 大小4 42G 准备一个8G的U盘 格式化 然后通过UltraISO工具将ISO镜像写入到U盘 接着开机启动U盘 华硕是按esc键 选择in
  • 英伟达GPU中的Tnesor Cores数量多寡与显卡性能有什么关联?

    前言 最近在调研常用显卡的参数 看到Nvidia Tensor Cores常用于其中作为对比 呈现在性能好的显卡比如A100比RTX 3060更多更全面 开始思考Tensor Cores细致的作用是什么 英伟达GPU显卡的简要发展历程 GT
  • ckplayer 播放视频

    备注 其中引用文件无法上传 如果需要私信即可
  • 前端例程20220920:纯CSS图片自动轮播效果

    演示 原理 代码
  • 文件ajax上传方式

    直接看代码 1 html table class layui table thead tr td width 20 产品信息 td td 产品信息 td tr thead tbody tr td 产品名称 td td td tr tbody
  • ios中点击input输入框,页面放大问题

    解决办法 在head中加入以上meta声明 就可以了

随机推荐

  • 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标签