目前,几个项目中用到了不同的方法,总结一下分享出来。

第一种,通过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前端上传文件的几个解决方案的更多相关文章

  1. H5+MUI上传文件

    应用场景:MUI+H5+WEBAPI 今天在给我外甥女调手机端上传图片的时候,发现他是直接调用的MUI下的api,直接调取相册或者相机,到最后只看见了一个文件的路径,所以以前写的上传文件就不太好套上去 ...

  2. django-form.errors和前端上传文件

    一.上传文件: 在相应的模型里面定义`FileField`或者是`ImageField`类型的字段,并且1.设置好`upload_to`参数来指定上传的路径. class User(models.Mo ...

  3. 前端上传文件 后端PHP获取文件

    <body> <form action="03-post-file.php" method="post" enctype="mult ...

  4. web前端:上传文件夹(需支持多浏览器)

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  5. ASP.NET、JAVA跨服务器远程上传文件(图片)的相关解决方案整合

    一.图片提交例: A端--提交图片 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string u ...

  6. HipChat上传文件报未知错误解决方案

    前言 HipChat是Atlassian公司的一款团队协作即时通讯工具,服务端为Linux(官方给的服务端就是一个虚拟机),在Windows.Linux.Android.IOS.Mac等平台都有客户端 ...

  7. Web上传文件的三种解决方案

    第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname =  ...

  8. 优秀的前端上传文件插件 web uploader

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  9. flask-admin fileadmin 上传文件,中文名的解决方案 重写部分secure_filename

    class upload_view(FileAdmin): def _save_form_files(self, directory, path, form): super() filename = ...

随机推荐

  1. C#设计模式(6)-原型模式

    引言 上一篇介绍了设计模式中的抽象工厂模式-C#设计模式(3)-建造者模式,本篇将介绍原型模式: 点击这里查看全部设计模式系列文章导航 原型模式简介 原型模式:用原型实例指定创建对象的种类,并且通过拷 ...

  2. Lucene第一篇【介绍Lucene、快速入门】

    什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引 ...

  3. Hadoop的safeMode

    当集群启动的时候,会首先进入到安全模式.系统在安全模式下,会检查数据块的完整性.假设我们设置的副本数(即参数dfs.replication)是5,那么在dataNode上就应该有5个副本存在,假设只存 ...

  4. 对redux的理解

     redux原理 某公司有物流(actionType).电商(actionType).广告(actionType)3块业务,在公司财务系统(state)统一记录着三块业务分别赚取到的资金.某天,电商业 ...

  5. Vue.js的从入门到放弃进击录(一)

    感谢我们项目组给机会,让我学了Vue.js,打开新世界大门...哈哈哈,也没有那么夸张,不过学下来确实觉得入门还是蛮容易的.我大概前前后后学了有一个月的样子,一开始只是比较急着可以写东西出来,后来因为 ...

  6. 【POJ】1067 取石子游戏(博弈论)

    Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  7. WordPress-基础设置之常规设置

    对于第一次使用Wordpress系统的朋友,请先别着急发布文章及进行其他操作,为了更加科学的使用及管理wordpress,应该需要对其进行相关设置,主要涉及3个部分,一.常规设置,二.阅读设置,三.固 ...

  8. web应用程序 前段部分调优

    1. 使用瀑布图初步诊断网站性能瓶颈 一般来说,打开一个网页的速度会受到以下几项的影响: 1) 服务器花了太长的时间将.aspx页面的内容转化为html. 2) .aspx页面花了太长的时间从服务器端 ...

  9. springMVC中的redirect和forward区别?

    1.forward在跳转后可以取到message值,redirect在跳转后无法取到message值. 2.forward跳转后地址栏URL不会改变,而redirect会改变.

  10. 2—sat

    模型的解决方法看论文<利用对称性解决2-SAT问题> HDU1814 :难度1.5 HDU1824: 难度 2 HDU1815: 难度3 HDU1816: 对于每两个人,二选一HDU181 ...