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

第一种,通过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. linux系统命令<二>----du的使用方法

    1> 要显示一个目录树及其每个子树的磁盘使用情况 du /home/linux 这在/home/linux目录及其每个子目录中显示了磁盘块数. 2> 要通过以1024字节为单位显示一个目录 ...

  2. 【概率论与数理统计】小结4 - 一维连续型随机变量及其Python实现

    注:上一小节总结了离散型随机变量,这个小节总结连续型随机变量.离散型随机变量的可能取值只有有限多个或是无限可数的(可以与自然数一一对应),连续型随机变量的可能取值则是一段连续的区域或是整个实数轴,是不 ...

  3. shell二位数组——终端字符下降动画

    猜想:Shell支持关联数组,可以利用关联数组模拟二维数组. [验证猜想] #!/bin/bash array[1,1]=1 array[2,1]=2 array[3,1]=3 for i in `s ...

  4. 12 Nonlinear Transformation

    一.二次假设 实际上线性假设的复杂度是受到限制的, 需要高次假设打破这个限制 假设数据不是线性可分的,但是可以被一个圆心在原点的圆分开, 需要我们重新设计基于该圆的PLA等算法吗 不用, 只需要通过非 ...

  5. java 反射 类装载器

    前言: java语言允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在jvm中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息,如构 ...

  6. angular学习-01,使用第三方库(jquery...)

    开发环境(window) 1.安装node  https://nodejs.org/en/ 2.安装angular-cli npm install -g @angular/cli 3.使用ng new ...

  7. Excel更改单元格格式后无效

    问题描述: 比如修改了数据的自定义显示格式(日期显示 yyyy"年"m"月",手机号分段000-0000-0000),应用后发现只有部分生效,或者都不生效,再检 ...

  8. jQuery实现web页面固定列表搜索

    1.需求分析:现在有一个数据展示列表页面,列表内容固定,使用jQuery在固定的列表中实现搜索功能. 2.核心代码: <!-- 添加jquery库 --> <script type= ...

  9. ZOJ 2042 Divisibility (DP)

    Divisibility Time Limit: 2 Seconds      Memory Limit:65536 KB Consider an arbitrary sequence of inte ...

  10. Spring+JUnit4单元测试入门

    (一).JUnit介绍 JUnit是Java中最有名的单元测试框架,多数Java的开发环境都已经集成了JUnit作为单元测试的工具.好的单元测试能极大的提高开发效率和代码质量. Maven导入juni ...