在表单中无法直接使用 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. iOS KVC valueForKeyPath学习心得

    #import <Foundation/Foundation.h> @interface myClass1 : NSObject @property (nonatomic, copy) N ...

  2. Codeforces 552C Vanya and Scales(思路)

    题目大概说有101个质量w0.w1.w2.....w100的砝码,和一个质量m的物品,问能否在天平两边放物品和砝码使其平衡. 哎,怎么没想到..注意到w0.w1.w2.....w100—— 把m转化成 ...

  3. myeclipse操作记录

    myeclipse里面jsp页面里面js注释快捷键 ctrl + shift +cctrl + / MyEclipse 每次保存都要building workspace的解决方法 方法一:菜单栏-&g ...

  4. matlab中各种高斯相关函数

    matlab中各种高斯相关函数 matlab, 高斯函数, 高斯分布 最常见的是产生服从一维标准正态分布的随机数 n=100;  x=randn(1,n)  实现服从任意一维高斯分布的随机数 u=10 ...

  5. 【原】iOS中KVC和KVO的区别

    在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...

  6. BZOJ4607 : [PA2015 Final]Edycja

    显然做完操作$2$后再做操作$1$. 建立一个$26$个点的有向图,每个点只有一条出边,$i$->$j$表示$i$最终变成了$j$,边权为一开始是$i$,最后不是$j$的位置个数,如果$i\ne ...

  7. BZOJ3934 : [CQOI2015]标识设计

    轮廓线插头DP. 设$f[i][j][a][b][c][d][e]$表示考虑到了$(i,j)$,轮廓线上3个下插头的位置分别为$a,b,c$,是否有右插头,已经放了$e$个$L$的方案数. 然后直接D ...

  8. Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

     dispatchTouchEvent (分发TouchEvent) 处理触摸事件分发,事件(多数情况)是从Activity的dispatchTouchEvent开始的.执行super.dispatc ...

  9. Codeforces Round #253 (Div. 2) D. Andrey and Problem

    关于证明可以参考题解http://codeforces.com/blog/entry/12739 就是将概率从大到小排序然后,然后从大到小计算概率 #include <iostream> ...

  10. ACM: 限时训练题解-Runtime Error-二分查找

    Runtime Error   Bahosain was trying to solve this simple problem, but he got a Runtime Error on one ...