H5前端上传文件的几个解决方案
目前,几个项目中用到了不同的方法,总结一下分享出来。
第一种,通过FormData来实现。
首先,添加input控件file。
<input type="file" name="uploadFile1" id="uploadFile1" runat="server" value="" multiple accept="image/jpg,image/jpeg,image/png,image/bmp,video/*"/>
然后添加对应的前端代码。
var input = document.getElementById("uploadFile");
var getOnloadFunc = function (aImg) {
return function (evt) {
aImg.src = evt.target.result;
};
}
input.addEventListener("change", function (evt) {
for (var i = 0, numFiles = this.files.length; i < numFiles; i++) {
var file = this.files[i];
var img = document.createElement("img");
$(".tp").append(img);
var reader = new FileReader();
reader.onload = getOnloadFunc(img);
reader.readAsDataURL(file);
alert(file.name);
var fd = new FormData();
// 直接传递file对象到后台
fd.append("image", file);
fd.append("guanId", $("input[name=commonGuanId]").val());
$.ajax({
url : '/tools/submit_ajax.ashx?action=sign_upload',
type : 'POST',
data : fd,
processData: false,
contentType: false,
timeout : 10000,
success : function(data) {
var mydata = JSON.parse(data);
if (mydata.status == 1) {
alert("上传成功");
} else {
alert("失败,请稍后重试!");
}
},
error : function(xhr,textStatus){
//alert('上传失败,请稍后重试');
}
});
}
}, false);
第二个,微信JSSDK接口,这个用起来比较方便,但是必须在微信的环境中应用,有局限性。
wx.config({
debug: false,
appId: '<% = config.appId%>',
timestamp: '<% = config.timestamp%>',
nonceStr: '<% = config.nonceStr%>',
signature: '<% = config.signature%>',
jsApiList: ['chooseImage',
'previewImage',
'uploadImage',
'downloadImage'
]
});
var serverIds = ""
function uploadImg() {
if(serverIds!="")
{
serverIds="";
}
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
var localIds = res.localIds; // 返回选定照片的本地ID列表
syncUpload(localIds); // localId可作为img标签的src属性显示图片
}
});
}
function syncUpload(localIds) {
var localId = localIds.pop();
wx.uploadImage({
localId: localId, // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
var serverId = res.serverId; // 返回图片的服务器端serverId
serverIds = serverIds + serverId + ",";
if (localIds.length > 0) {
syncUpload(localIds);
} else {
$.ajax({
type: "POST",
url: "/tools/submit_ajax.ashx?action=img_upload",
dataType: "json",
data: {
"serverIds":serverIds
},
timeout: 20000,
success: function (data, textStatus) {
if(data.status==1){
$("#picname").attr("src", data.msg);
$("#hidImgUrl").attr("value",data.msg);
}else{
alert(data.msg);
}
},
error:function(data){
alert("系统错误,请刷新页面重试!");
}
});
}
}
});
};
H5前端上传文件的几个解决方案的更多相关文章
- H5+MUI上传文件
应用场景:MUI+H5+WEBAPI 今天在给我外甥女调手机端上传图片的时候,发现他是直接调用的MUI下的api,直接调取相册或者相机,到最后只看见了一个文件的路径,所以以前写的上传文件就不太好套上去 ...
- django-form.errors和前端上传文件
一.上传文件: 在相应的模型里面定义`FileField`或者是`ImageField`类型的字段,并且1.设置好`upload_to`参数来指定上传的路径. class User(models.Mo ...
- 前端上传文件 后端PHP获取文件
<body> <form action="03-post-file.php" method="post" enctype="mult ...
- web前端:上传文件夹(需支持多浏览器)
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...
- ASP.NET、JAVA跨服务器远程上传文件(图片)的相关解决方案整合
一.图片提交例: A端--提交图片 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string u ...
- HipChat上传文件报未知错误解决方案
前言 HipChat是Atlassian公司的一款团队协作即时通讯工具,服务端为Linux(官方给的服务端就是一个虚拟机),在Windows.Linux.Android.IOS.Mac等平台都有客户端 ...
- Web上传文件的三种解决方案
第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname = ...
- 优秀的前端上传文件插件 web uploader
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...
- flask-admin fileadmin 上传文件,中文名的解决方案 重写部分secure_filename
class upload_view(FileAdmin): def _save_form_files(self, directory, path, form): super() filename = ...
随机推荐
- javascript面向对象编程笔记
对象:一切事物皆是对象.对象是一个整体,对外提供一些操作.比如说一个收音机是一个对象,我们不需要知道它的内部结构是什么,只需要会使用外部的按钮就可以使用收音机. 面向对象:面向对象语言的标志是他们都有 ...
- 快速设计ComboBox下拉框
传统软件项目开发时,需要每个控件一个一个的来设计,同时需要在页面功能中对每个控件的属性进行判定处理,尤其是页面风格布局样式需要花去一大半的时间,并且后续要想修改是非常麻烦繁琐,这样就导致设计完成一个功 ...
- bat文件逐行读取txt
From_Ip='192.138.60.16'@echo offfor /f "tokens=1,2 delims='" %%a in (D:\ETL\bat\config.txt ...
- android自定义动画
前一篇说了实现过程,这次来写一个自己简单实现的3d动画 先来属性声明配置,方便使用xml 文件来定制动画 <!-- 有些类型其实是没必要的,只是实例代码,为了更具有代表性 --> < ...
- 利用GPU实现无尽草地的实时渲染
0x00 前言 在游戏中展现一个写实的田园场景时,草地的渲染是必不可少的,而一提到高效率的渲染草地,很多人都会想起GPU Gems第七章 <Chapter 7. Rendering Countl ...
- 个人从源码理解angular项目在JIT模式下的启动过程
通常一个angular项目会有一个个模块(Module)来管理各自的业务,并且必须有一个根模块(AppModule)作为应用的入口模块,整个应用都围绕AppModule展开.可以这么说,AppModu ...
- 说下browserslist
browserslist 是一个开源项目 见到有些package.json里会有如下的配置参数 "browserslist": [ "> 1%", &qu ...
- Codeforces 845 A. Chess Tourney 思路:简单逻辑题
题目: 题意:输入一个整数n,接着输入2*n个数字,代表2*n个选手的实力. 实力值大的选手可以赢实力值小的选手,实力值相同则都有可能赢. 叫你把这2*n个选手分成2个有n个选手的队伍. ...
- 80端口被system 占用
1 运行'netstat -ano'发现80端口被pid=4的进程占用 2 打开任务管理器,发现pid=4的进程,其实是system进程,其对应的进程描述是NT kernel & system ...
- Find The Multiple (poj1426 一个好的做法)
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16505 Accepted: 673 ...