JQuery+ajax实现批量上传图片(自写)

302997924

302997924

2016-02-19 09:36

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的JQuery+ajax实现批量上传图片(自写),手机电脑控们准备好了吗?一起看过来吧!

在网上搜索了一下,发现以jquery+ajax方式实现单张图片上传的代码是有的,但实现批量上传图片的程序却没搜索到,于是根据搜索到的代码,写了一个可以批量上传的。
先看效果图

JQuery+ajax实现批量上传图片

点击增加按钮,会增加一个选择框,如下图:

JQuery+ajax实现批量上传图片

选择要上传的图片,效果图如下:

JQuery+ajax实现批量上传图片

上传成功如下图:

JQuery+ajax实现批量上传图片

JQuery+ajax实现批量上传图片

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

下面来看代码:
前台html主要代码:
代码如下:

button id="SubUpload" class="ManagerButton" onClick="TSubmitUploadImageFile();return false;"确定上传/button  
button id="CancelUpload" class="ManagerButton" onClick="javascript:history.go(-1);"取消/button  
button id="AddUpload" class="ManagerButton" onClick="TAddFileUpload();return false;"增加/button
trtd class="tdClass"
图片1:
/tdtd class="tdClass"
input name="" size="60" id="uploadImg1" type="file" /
span id="uploadImgState1"/span
/td/tr

因为用了JQuery,所以你完全可以把click事件放在js文件中
“增加”按钮js代码:
代码如下:

var TfileUploadNum=1; //记录图片选择框个数
var Tnum=1; //ajax上传图片时索引
function TAddFileUpload()
{
var idnum = TfileUploadNum+1;
var str="trtd class='tdClass'图片"+idnum+":/td";
str += "td class='tdClass'input name='' size='60' id='uploadImg"+idnum+"' type='file' /span id='uploadImgState"+idnum+"'";
str += "/span/td/tr";
("#imgTable").append(str);
TfileUploadNum += 1;
}


“确定上传”按钮js代码:
代码如下:

function TSubmitUploadImageFile()
{
M("SubUpload").disabled=true;
M("CancelUpload").disabled=true;
M("AddUpload").disabled=true;
setTimeout("TajaxFileUpload()",1000);//此为关键代码
}

关于setTimeout("TajaxFileUpload()",1000);这句代码:因为所谓的批量上传,其实还是一个一个的上传,给用户的只是一个假象。只所以要延时执行TajaxFileUpload(),是因为在把图片上传到服务器上时,我在后台给图片重新命名了,命名的规则是,如下代码:
代码如下:

Random rd = new Random();
StringBuilder serial = new StringBuilder();
serial.Append(DateTime.Now.ToString("yyyyMMddHHmmssff"));
serial.Append(rd.Next(0, 999999).ToString());
return serial.ToString();

即使我命名精确到毫秒,另外再加上随机数,可是还是有上传的第二张图片把上传的第一张图片覆盖的情况出现。所以此处我设置了延时1秒后在上传下一张图片。刚开始做这个东西的时候,用的是for循环,来把所有的图片一个一个的循环地用ajax上传,可是for循环速度太快了,可能第一张图片还没来得及ajax,第二张就被for过来了,还是有第二张覆盖第一张的情况出现。
下面来看TajaxFileUpload()函数,代码如下:
代码如下:

function TajaxFileUpload()
{
if(TnumTfileUploadNum+1)
{
//准备提交处理
("#uploadImgState"+Tnum).html("img src=../images/loading.gif /");
//开始提交
.ajax
({
type: "POST",
url:"http://localhost/ajaxText2/Handler1.ashx",
data:{upfile:("#uploadImg"+Tnum).val(),category:("#pcategory").val()},
success:function (data, status)
{
//alert(data);
var stringArray = data.split("|");

if(stringArray[0]=="1")
{
//stringArray[0] 成功状态(1为成功,0为失败)
//stringArray[1] 上传成功的文件名
//stringArray[2] 消息提示
("#uploadImgState"+Tnum).html("img src=../images/note_ok.gif /");//+stringArray[1]+"|"+stringArray[2]);
}
else
{
//上传出错
("#uploadImgState"+Tnum).html("img src=../images/note_error.gif /"+stringArray[2]);//+stringArray[2]+"");
}
Tnum++;
setTimeout("TSubmitUploadImageFile()",0);
}
});
}
}

上面的代码没什么可说的,很容易看懂。下面来看Handler1.ashx(一般处理程序)如何来处理post过来的图片的(此代码来自网上,具体地址忘记了),下面只给出关键代码,全部代码在附件里。
1、
代码如下:

string _fileNamePath = "";
try
{
_fileNamePath = context.Request.Form["upfile"];
//开始上传
string _savedFileResult = UpLoadFile(_fileNamePath);
context.Response.Write(_savedFileResult);
}
catch
{
context.Response.Write("0|error|上传提交出错");
}

2、
代码如下:

//生成将要保存的随机文件名
string fileName = GetFileName() + fileNameExt;
//物理完整路径
string toFileFullPath = HttpContext.Current.Server.MapPath(toFilePath);
//检查是否有该路径 没有就创建
if (!Directory.Exists(toFileFullPath))
{
Directory.CreateDirectory(toFileFullPath);
}
///创建WebClient实例
WebClient myWebClient = new WebClient();
//设定windows网络安全认证 方法1
myWebClient.Credentials = CredentialCache.DefaultCredentials;
//要上传的文件
FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
//FileStream fs = OpenFile();
BinaryReader r = new BinaryReader(fs);
//使用UploadFile方法可以用下面的格式
//myWebClient.UploadFile(toFile, "PUT",fileNamePath);
byte[] postArray = r.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(toFile, "PUT");
if (postStream.CanWrite)
{
postStream.Write(postArray, 0, postArray.Length);
}


3、检查是否合法的上传文件
代码如下:

private bool CheckFileExt(string _fileExt)
{
string[] allowExt = new string[] { ".gif", ".jpg", ".jpeg" };
for (int i = 0; i allowExt.Length; i++)
{
if (allowExt[i] == _fileExt) { return true; }
}
return false;
}


4、生成要保存的随即文件名
代码如下:

public static string GetFileName()
{
Random rd = new Random();
StringBuilder serial = new StringBuilder();
serial.Append(DateTime.Now.ToString("yyyyMMddHHmmssff"));
serial.Append(rd.Next(0, 999999).ToString());
return serial.ToString();
}

Ok,基本上这个批量上传图片的JQuery+ajax方式实现的程序完成了。如果你要上传word文档,pdf文件,只要稍作修改,就可以实现了。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
展开更多 50%)
分享

猜你喜欢

JQuery+ajax实现批量上传图片(自写)

Web开发
JQuery+ajax实现批量上传图片(自写)

jquery 批量上传图片实现代码

Web开发
jquery 批量上传图片实现代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

jquery ajax实现批量删除具体思路及代码

Web开发
jquery ajax实现批量删除具体思路及代码

jQuery Ajax文件上传(php)

Web开发
jQuery Ajax文件上传(php)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用jQuery扩展自写的 UI导航

Web开发
用jQuery扩展自写的 UI导航

ASP实现图片上传

ASP
ASP实现图片上传

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Android 获取正在运行的任务和服务的小例子

Android 获取正在运行的任务和服务的小例子

双击U盘提示“磁盘未被格式化”怎么办

双击U盘提示“磁盘未被格式化”怎么办
下拉加载更多内容 ↓