本次使用AJAXUPLOAD做为上传客户端无刷上传插件,其最新版本为3.9,官方地址:
在页面中引入 jquery.min.1.4.2.js 和 ajaxupload.js
rush:js;">
HTML 代码:
rush:js;">
上传图片:
浏览
js代 码:
rush:js;">
服务器端 ajaxuploadhandler.ashx 代码
rush:js;">
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
HttpPostedFile postedFile = context.Request.Files[0];
string savePath = "/upload/images/";
int filelength = postedFile.ContentLength;
int fileSize = 163600; //150K
string fileName = "-1"; //返回的
上传后的
文件名
if (filelength <= fileSize)
{
byte[] buffer = new byte[filelength];
postedFile.InputStream.Read(buffer,filelength);
fileName = UploadImage(buffer,savePath,"jpg");
}
context.Response.Write(fileName);
}
public static string UploadImage(byte[] imgBuffer,string uploa
dpath,string ext)
{
try
{
Sy
stem.IO.MemoryStream m = new MemoryStream(imgBuffer);
if (!Directory.Exists(HttpContext.Current.Server.MapPath(uploa
dpath)))
Directory.CreateDirectory(HttpContext.Current.Server.MapPath(uploa
dpath));
string imgname = CreateIDCode() + "." + ext;
string _path = HttpContext.Current.Server.MapPath(uploa
dpath) + imgname;
Image img = Image.FromStream(m);
if (ext == "jpg")
img.Save(_path,Sy
stem.Drawing.Imaging.ImageFormat.Jpeg);
else
img.Save(_path,Sy
stem.Drawing.Imaging.ImageFormat.Gif);
m.Close();
return uploa
dpath + imgname;
}
catch (Exception ex)
{
return ex.Message;
}
}
public static string CreateIDCode()
{
DateTime Time1 = DateTime.
Now.ToUniversalTime();
DateTime Time2 = Convert.ToDateTime("1970-01-01");
TimeSpan span = Time1 - Time2; //span就是两个日期之
间的差额
string t = span.TotalMilliseconds.ToString("0");
return t;
}
在PHP网站开发中,文件上传功能时常用到,之前我已介绍过如何利用PHP实现文件上传功能。随着WEB技术的发展,用户体验成为衡量网站成功与否的关键,今天和大家分享如何在PHP中利用Jquery实现Ajax方式文件上传功能的例子,其中使用到了Jquery插件Ajaxupload,其可以实现单个文件和多文件上传功能。
AjaxUpload
Jquery插件AjaxUpload实现文件上传功能时无需创建form表单,即可实现Ajax方式的文件上传,当然根据需要也可以创建form表单。
准备工作
1、下载Jquery开发包和文件上传插件AjaxUpload。
2、创建uploadfile.html,并引入Jquery开发包和AjaxUpload插件
rush:js;">
3、根据Jquery插件AjaxUpload的需要,创建一个触发Ajax文件上传功能的DIV
已上传的文件列表:
注释:由下面的代码我们可以看到Jquery插件AjaxUpload是根据upload_button这个DIV触发文件上传功能。
在代码中我设置了开关,根据需要可以匹配上传文件类型,同时也可以设置是以Ajax方式实现单个文件上传还是多个文件上传。
rush:js;">
$(document).ready(function(){
var button = $('#upload_button'),interval;
var fileType = "all",fileNum = "one";
new AjaxUpload(button,{
action: 'do/uploadfile.
PHP',/*data:{
'buttoninfo':button.text()
},*/
name: 'userfile',onSubmit : function(file,ext){
if(fileType == "pic")
{
if (ext && /^(jpg|png|jpeg|gif)$/.test(ext)){
this.setData({
'info': '
文件类型为
图片'
});
} else {
$('
').appendTo('#example .files').text('非
图片类型
文件,请重传');
return false;
}
}
button.text('
文件上传中');
if(fileNum == 'one')
this.
disable();
interval = window.setInterval(function(){
var text = button.text();
if (text.length < 14){
button.text(text + '.');
} else {
button.text('
文件上传中');
}
},onComplete: function(file,response){
if(response != "success")
alert(response);
button.text('
文件上传');
window.clearInterval(interval);
this.enable();
if(response == "success");
$('
').appendTo('#example .files').text(file);
}
});
});
注释:
第1行:$(document).ready()函数,Jquery中的函数,类似于window.load,使用这个函数可在DOM载入就绪能够读取并操纵时立即调用绑定的函数。
第3行:fileType和fileNum参数代表上传文件的类型和数量,默认值为可上传所有类型文件,同一时间只能上传一个文件,如想上传图片文件或同时上传多个文件,可将这两个变量值变为pic和more。
第6~8行:POST到服务器的数据,你可以设置静态值也可以通过Jquery的DOM操作函数获得一些动态值,比如form表单中INPUT的值等。
第9行:等同于前端
rush:js;">
服务器端$_FILES['userfile']
第10~36行:文件上传前触发的功能。
第11~21行:图片文件类型的过滤功能,Jquery setData函数用来设置POST至服务器端的值。
第25~26行:设置同时只上传一个文件还是多个文件,如果只上传一个文件,则将触发按钮禁掉。如果要多传输几个文件,请在服务器端PHP文件上传程序中设置MAXSIZE的值,当然上传文件的大小限制同时和PHP.INI文件中的设置也有关。
第28~35行:在文件上传过程中每隔200毫秒动态更新一次按钮的文字,已实现动态提示的效果。window.setInterval函数用来每隔指定的时间就执行一次内置的函数,交互时间单位为豪秒。
第37~49行:文件上传功能完成后触发的功能,根据返回值如果服务器端报错,则前端通过ALERT方式提示出错信息。
大体上是根据之前介绍的PHP文件上传功能代码实例教程改编,涉及到的文件上传大小的设置,出错信息等说明都已在此文中详细说明。
$MAX_SIZE)
echo "
上传的
文件大小超过了规定大小";
if($_FILES['userfile']['size'] == 0)
echo "请选择
上传的
文件";
if(!move_uploaded_file( $_FILES['userfile']['tmp_name'],$file_path))
echo "复制
文件失败,请重新
上传";
switch($_FILES['userfile']['error'])
{
case 0:
echo "success" ;
break;
case 1:
echo "
上传的
文件超过了
PHP.ini 中 upload_max_filesize 选项限制的值";
break;
case 2:
echo "
上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
break;
case 3:
echo "
文件只有部分被
上传";
break;
case 4:
echo "没有
文件被
上传";
break;
}
总结
基本上前端Ajax文件上传触发功能和服务器端PHP文件上传功能的原型就介绍完毕了,你可以根据自身需要对前后端代码进行补充,也可以将一些功能独立出来,比如文件类型、单个文件或者多文件上传功能。总的来说Jquery插件AjaxUpload实现文件上传功能的应用还是比较容易的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。