问题描述

最近在做一个把现有app转成H5的项目,需上传且表单提交,遇到如下问题:

1.关于上传图片的功能,服务端并未提供上传文件接口。(无接口无法使用官方上传api且uni-app的input type有效值只有4个(text,number,idcard,digit),并无type=file)。

2.保存接口需要上传文件与其他信息通过表单提交。(表单提交简单我们前端提交formData数据就好了)。

3.提交时要明白js是无法将file类型转为表单提交时file对应的(binary)类型的。

以上3点就决定了uni-app 官方提供的上传api是无法满足当前场景的。

解决方案

1.页面渲染完毕后,动态创建一个input:type=file的DOM元素

2.提交时,new一个FormData,将需要的值都append到这个formData实例中

3.将这个FormData实例作为参数提交

详细代码

1.关于动态创建input的时间节点,无论选择何时,必须是页面渲染完毕之后,我选择的是,点击上传后创建。

<!--template中-->
<text ref="input" class="upFile" @click="upload()"></text>
<!--methods中-->
upload(){var input = document.createElement('input');input.type = 'file'; input.accept='image/*';this.$refs.input.$el.appendChild(input);input.onchange = (event) => {  this.fileName = event.path[0].files[0].name;}  $('input').click();
},

2.提交

var formData = new FormData();
formData.append('id',XXX);

3.注意由于上传文件类型无法通过js转换成(binary)的形式,所以当前交互我采取的方式是用ajax交互

$.ajax({url:'XXX',type:"POST",data:formData,processData:false,   contentType:false,  success:function(data){},error:function(data){}
});

uni-app 实现input:type=file 上传,并实现表单提交相关推荐

  1. Input type=“file“上传文件change事件只触发一次解决方案

    Input type="file"上传文件change事件只触发一次解决方案 参考文章: (1)Input type="file"上传文件change事件只触发 ...

  2. input type='file' 上传文件时显示文件名及上传进度

    https://blog.csdn.net/qq_36687640/article/details/78551217 1.input type='file' 上传文件时显示文件名及上传进度 <i ...

  3. 使用input type=file 上传文件时需注意

    在asp.net的中使用<input type='file' />控件上传文件对文件的大小有限制,默认情况下大概在4m左右,如果上传再大的文件时就会出页面无法显示的错误. 修改web.co ...

  4. android webview使用html5input id=input type=file/ 上传相册、拍照照片

    本人编程新手,这次做的功能是android webview 嵌入HTML5的页面,页面中有一个<input id="input" type="file"/ ...

  5. 将input[type=file]上传文件隐藏在按钮下面,隐藏掉默认的样式

    直接上代码: <button style="position:relative;" class="btn btn-info btn-fill btn-wd" ...

  6. uniapp实现表单提交带图片上传 在做表单提交的时候,我们可能面临有图片上传,放在原生的html就好解决,form标签加上

    enctype="multipart/form-data" uniapp微信小程序 1.原图 页面部分 <form :model="data" @subm ...

  7. c 中html上传文件大小,IOS微信内置浏览器对html标签input type=file上传的文件大小size错误?...

    完整代码: function _s(){ var f = document.getElementById("f").files; //上次修改时间 alert(f[0].lastM ...

  8. .form文件_含文件上传的form表单AJAX提交小结

    最近在学习PHP时,遇到不知道如何含文件上传的form表单AJAX提交,现在把这些记录下来以备自己后续复习时用: HTML代码 *姓名: *性别: {eq name='list.sex' value= ...

  9. Retrofit 2.0 超能实践(三),轻松实现多文件/图片上传/Json字符串/表单

    通过前两篇姿势的入门 Retrofit 2.0 超能实践,完美支持Https传输 Retrofit2.0 完美同步Cookie实现免登录 本文出自:http://blog.csdn.net/sk719 ...

  10. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

最新文章

  1. Ajax与企业级应用开发
  2. 中国首篇Science机器人子刊!北航软体机器人实验室四年成果登上封面长篇
  3. java正则表达式所有字符串_java正则表达式获取字符串中所有匹配的内容
  4. ML之RFXGBoost:分别基于RF随机森林、XGBoost算法对Titanic(泰坦尼克号)数据集进行二分类预测(乘客是否生还)
  5. 【超实用】HCIE-RS面试真题分享
  6. eclispe修改project Explorer字体大小
  7. pycharm 快捷键介绍
  8. 都是大人物,看看你认识几个。
  9. 使用instantclient_11_2和PL/SQL Developer工具包连接oracle 11g远程数据库
  10. 怎么看表_怎么和爸妈沟通?
  11. python读音播报-用Python写一个语音播放软件
  12. 安卓开发工程师应该这样快速使用机智云APP开源框架
  13. 自动跳动滑动门html,CSS如何实现滑动门效果_html/css_WEB-ITnose
  14. DP1363F国产NFC射频前端芯片替代CLRC663/RC522
  15. 计算机显示屏知识,电脑显示器知识大全
  16. VP9编解码标准知识总结
  17. 图像坐标球面投影_OpenLayers中的球面墨卡托投影
  18. CCNA配置试验之八 帧中继——点到点子接口(point-to-point)
  19. 中文大写日期转换函数
  20. 腾讯企业邮箱不能发送短信认证

热门文章

  1. 【离散】画哈斯图--最好理解绝不会出错
  2. 深度学习(六):炼数成金的Tensorflow教程学习笔记(含代码)
  3. 华为员工工资曝光:入职12年月薪31万,小编我瑟瑟发抖
  4. python中search函数用法_查找匹配函数FIND和SEARCH的基本用法
  5. 云计算时代:PC会消亡吗?
  6. 两种方法实现卸载apk应用程序
  7. 解决Laravel5.5版本框架缺少vender目录报错问题
  8. 【爆笑】句经典流行俏皮语【爆笑】[
  9. VS2016 调用matlab脚本 ——缺少mclmcr.dll
  10. Nature:给研究生的四条金玉良言;颜宁:写的真好,相见恨晚