在表单中无法直接使用 Ajax 上传文件,解决的思路可以是使用插件无刷新地上传文件,返回文件上传后的地址,然后把该地址作为 Ajax 的参数传递给服务器端进行数据库处理。可以使用 uploadify 插件来实现该思路。

官方网站:http://www.uploadify.com

文档地址:http://www.uploadify.com/documentation/

插件有 Flash 版 和 HTML5 版,项目中用到的是 Flash 版。

下载 Demo 并解压:

其中 index.php :包含了 html ,并且调用了核心 js 库的接口;

jquery.uploadify.js :核心 js 库;

uploadify.php :处理上传,并且返回上传是否成功的状态值。

对官方 demo 稍作修改:

index.html 主要代码

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="__PUBLIC__/css/uploadify.css" type="text/css">
<script src="__PUBLIC__/js/Jquery-1.8.3.js.js"></script>
<script src="__PUBLIC__/js/jquery.uploadify.js" type="text/javascript"></script>
<script src="__PUBLIC__/js/upload.js" type="text/javascript"></script>
</head> <body>
<form id="upform">
<div id="queue"></div>
<input id="file_upload" name="file_upload" type="file" multiple="true">
</form>
</body>
</html>

upload.js 代码:

$(function(){
$timestamp = $("#timestamp").html();
$token = $("#token").html();
$swfurl = $("#swfurl").html();
$('#file_upload').uploadify({
'formData' : {
'timestamp' : $timestamp,
'token' : $token
},
'swf' : $swfurl,
'uploader' : 'uploadify.php',
'onUploadSuccess' : function(file, data, response) {
var dataObj = eval("(" + data + ")");
if(1 == dataObj.code){
$msg = '文件'+ file.name + '上传成功';
$("#msg").html($msg);
$("#filename").html(dataObj.filename);
}else if(2 == dataObj.code){
$msg = '文件上传失败,请上传小于2M的.dox、.docx、.pdf文件';
layer.msg($msg, 2, 3);
}else if(3 == dataObj.code){
$msg = '文件类型错误';
layer.msg($msg, 2, 3);
}else{
$msg = '上传失败,请上传小于2M的.dox、.docx、.pdf文件';
layer.msg($msg, 2, 3);
}
}
});
})

uploadify.php

<?php
$targetFolder = './Uploads/authorization';
$verifyToken = md5('unique_salt' . $_POST['timestamp']); if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; $fileTypes = array('doc','docx','pdf');
$fileParts = pathinfo($_FILES['Filedata']['name']); $filename = $_SESSION['member']['mid'].'-'.date('Ymd-His').'-'. mt_rand(0,1000).'.'.$fileParts['extension'];
$targetFile = rtrim($targetPath,'/') . '/' . $filename; if (in_array($fileParts['extension'],$fileTypes)) {
if(move_uploaded_file($tempFile,$targetFile)){
$arr['code']= 1;
}else{
//上传失败
$arr['code'] = 2;
$arr['file_name'] = '';
}
} else {
//文件类型错误
$arr['code'] = 3;
$arr['file_name'] = '';
}
}else{
$arr['code'] = 4;
$arr['file_name'] = '';
}
$arr['filename'] = $filename;
exit(json_encode($arr));

Ajax 无刷新上传文件插件 uploadify 的使用的更多相关文章

  1. ajax无刷新上传文件

    网页上传文件最简单的方式就是通过表单上传了,但是在提交表单的时候会导致网页刷新,但有的时候我们不想网页刷新,有什么办法呢,我们可以使用ajax上传文件来做到这一点.只有ajax还不行,还需要JavaS ...

  2. jquery 的ajax无刷新上传文件之后,页面还是会莫名的刷新-----解决办法

    文件上传用到全局数组: $_FILES 只需要把下面的 <button onclick="post()">提交</button> 改为 <input ...

  3. ajaxfileupload.js插件结合一般处理文件实现Ajax无刷新上传

    先上几张图更直观展示一下要实现的功能.本功能主要通过Jquery ajaxfileupload.js插件结合ajaxUpFile.ashx一般应用程序处理文件实现Ajax无刷新上传功能,结合NPOI2 ...

  4. 文件无刷新上传(swfUpload与uploadify)

    文件无刷新上传并获取保存到服务器端的路径 遇到上传文件的问题,结合之前用到过的swfUpload,又找了一个无刷新上传文件的jquery插件uploadify,写篇博客记录一下分别介绍这两个插件的实现 ...

  5. jquery ajax php 无刷新上传文件 带 遮罩 进度条 效果的哟

    在很多项目中都会叫用户上传东西这些的,自从接触了jquery 和ajax之后就不管做什么,首先都会想到这个,我这个人呢?是比较重视客户体验的,这次我这边负责的是后台板块,然后就有一块是要求用户上传照片 ...

  6. ajax +jsp+iframe无刷新上传文件[转]

    http://hi.baidu.com/zj360202/blog/item/f23e3711f929c774cb80c475.html ajax jsp 无刷新上传文件 2009-10-26 16: ...

  7. jQuery+php+ajax实现无刷新上传文件功能

    jQuery+php+ajax实现无刷新上传文件功能,还带有上传进度条动画效果,支持图片.视频等大文件上传. js代码 <script type='text/javascript' src='j ...

  8. 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

    现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...

  9. web 开发之js---巧用iframe实现jsp无刷新上传文件

    首先要说的就是 ajax 是无法实现上传文件的,可以想一下ajax与后台通信都是通过传递字符串,怎么能传递文件呢?其实出于安全考虑js是不能操作文件的,所以就不要再说用ajax来实现文件的上传了,这是 ...

随机推荐

  1. BZOJ1795 : [Ioi2008]Pyramid Base 金字塔地基

    1.$B>0$ 二分答案,然后扫描线,线段树维护某个点作为左下角时的费用的最小值,支持区间加. 时间复杂度$O(n\log^2n)$. 2.$B=0$ 枚举左边界,则最优右边界可以通过双指针求出 ...

  2. BZOJ4383 : [POI2015]Pustynia

    设$a$到$b$的边权为$c$的有向边的含义为$b\geq a+c$,则可以根据题意构造出一张有向图. 设$f[x]$为$x$点可行的最小值,$a[x]$为$x$位置已知的值,则$f[x]=\max( ...

  3. Redis Java API

    package cn.ac.iscas.pebble.dc.redispool; import java.io.File; import java.io.FileOutputStream; impor ...

  4. eclipse svn proxy

    C:\Users\userName\AppData\Roaming\Subversion下的servers文件, 将#http-proxy-host和#http-proxy-port这两行前面的#号去 ...

  5. ORACLE11g JDBC Driver

    http://blog.163.com/z_rx/blog/static/276363762011312947507/ ORACLE服务器端安装程序找到相应目录"x$\app\Adminis ...

  6. Android 推送实现

    解决数据同步的问题:常用的方法有2种. (1) 定时去服务器上查询数据,也叫Polling. (2) 手机跟服务器之间维护一个 TCP 长连接,或者使用SMS,当服务器有数据时,实时推送到客户端,也就 ...

  7. Codeforces Round #253 (Div. 2) B - Kolya and Tandem Repeat

    本题要考虑字符串本身就存在tandem, 如测试用例 aaaaaaaaabbb 3 输出结果应该是8而不是6,因为字符串本身的tanderm时最长的 故要考虑字符串本身的最大的tanderm和添加k个 ...

  8. css3立体旋转动画

    demo地址 效果图 在别人网站上看到一个立体旋转的例子,然后突然想到自己前几天学习的css3旋转,就试着做了一个例子,看起来有一些粗糙. html结构很简单: <div> <ul ...

  9. android中利用Socket实现手机客户端与PC端进行通信

    1. 项目截图

  10. HDU-3549 最大流模板题

    1.HDU-3549   Flow Problem 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 3.总结:模板题,参考了 http://ww ...