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

2016-02-19 09:36 88 1 收藏

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

【 tulaoshi.com - Web开发 】

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

JQuery+ajax实现批量上传图片

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

JQuery+ajax实现批量上传图片

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

JQuery+ajax实现批量上传图片

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

上传成功如下图:

JQuery+ajax实现批量上传图片

JQuery+ajax实现批量上传图片

(本文来源于图老师网站,更多请访问http://www.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://www.tulaoshi.com/n/20160219/1591442.html

延伸阅读
标签: PHP
  //文件上传。Linux+apache+php3/4测试通过。iis测试未通过,win+apache+php未测试   <?php   if ($HTTP_POST_VARS["upload"]=="上传"){   file://这里你可以加上检查文件名,格式,图片尺寸等功能,   file://$picurl 本地系统的全路径   file://$picurl_nam...
标签: Web开发
用jQuery调用其他项目的WebService 实现登录验证功能 html输入用户名密码: 代码 代码如下: table tr td Login ID: /td td input type="text" value="" / /td /tr tr td Login Password: /td td input type="password" value="" / /td /tr tr td input value="Sign in" readonly / /td td input value="Sign up" ...
标签: Web开发
传统ajax Code 代码如下: script language="javascript" var xmlHttp; function createXMLHttpRequest(){ if(window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); else if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); } function startRequest(){ createXMLHttpRequest(); xmlHttp.open("GET...
标签: Web开发
使用 jquery 框架:下载 jquery.js 新建一个 web 工程 ajax ; 在 webRoot 下新建一个 jslib 文件夹:专门存放 js 文件; 在 webRoot 下新建一个 html/jsp 页面: login.html 代码如下: script type = "text/javascript" src = "jslib/jquery.js"/ script script type = "text/javascript" src = "jslib/verify.js"/ script / head b...
标签: Web开发
代码如下: % response.Expires=-1 response.CacheControl="no-cache" % !--#include file="../../conn/conn.asp"-- !--#include file="../psw.asp"-- !--#include file="../../functions/dofunction.asp"-- !--#include file="../../functions/showfunction.asp"-- !--#include file="../../fqdb/admin/website.asp"-- % cmd = che...

经验教程

267

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部