一,原理

AjaxFileUpload.js并不是一个很出名的插件,只是别人写好的放出来供大家用,原理都是创建隐藏的表单和iframe然后用JS去提交,获得返回值。

当初做了个异步上传的功能,选择它因为它的配置方式比较像jQuery的AJAX,我很喜欢。

评论里面说到的不行。那是因为我们用的不是同一个js。我上github搜AjaxFileUpload出来很多类似js。

ajaxFileUpload是一个异步上传文件的jQuery插件

  传一个不知道什么版本的上来,以后不用到处找了。

  语法:$.ajaxFileUpload([options])

  options参数说明:

1、url            上传处理程序地址。  
2,fileElementId       需要上传的文件域的ID,即<input type="file">的ID。
3,secureuri        是否启用安全提交,默认为false。 
4,dataType        服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
5,success        提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
6,error          提交失败自动执行的处理函数。
7,data           自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。
8, type            当要提交自定义参数时,这个参数要设置成post

错误提示:

1,SyntaxError: missing ; before statement错误
  如果出现这个错误就需要检查url路径是否可以访问
2,SyntaxError: syntax error错误
  如果出现这个错误就需要检查处理提交操作的服务器后台处理程序是否存在语法错误
3,SyntaxError: invalid property id错误
  如果出现这个错误就需要检查文本域属性ID是否存在
4,SyntaxError: missing } in XML expression错误
  如果出现这个错误就需要检查文件name是否一致或不存在
5,其它自定义错误
  大家可使用变量$error直接打印的方法检查各参数是否正确,比起上面这些无效的错误提示还是方便很多。

二,用法举例

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/ajaxfileupload.js"></script>
<script>
/**
* 异步上传图片
*/
$(function () {
$("#saveImg").click(function () {
//效验上传图片类型
var ths=$('#fileImg');
if (ths.val().length <= 0) {
alert("请上传图片");
return false;
} else if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(ths.val())){
alert("图片类型必须是.gif,jpeg,jpg,png中的一种");
ths.val("");
return false;
}
//效验成功调用异步上传函数
ajaxFileUpload();
return true;
})
})
/**
* ajaxFileUpload JQuery异步上传插件
*/
function ajaxFileUpload() {
$.ajaxFileUpload
(
{
url: realPath+"/whiteListRule/saveImg.htm", //用于文件上传的服务器端请求地址
type: 'post',
data: { gameId: gameId },
secureuri: false, //是否需要安全协议,一般设置为false
fileElementId: 'fileImg', //文件上传域的ID
dataType: 'text', //返回值类型 一般设置为json
success: function (data, status) //服务器成功响应处理函数
{
var data=eval("("+data+")")
if (typeof (data.error) != 'undefined') {
if (data.error != '') {
alert(data.error);
} else {
alert(data.msg);
$("#img1").attr("src", data.imgurl);
}
}
},
error: function (data, status, e)//服务器响应失败处理函数
{
alert(e);
}
}
)
return false;
}
</script>

package com.shiliu.game.controller;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.shiliu.game.common.Constant;
import com.shiliu.game.domain.Game;
import com.shiliu.game.service.IGameService;
import com.shiliu.game.utils.PropertyUtil;
import com.shiliu.game.utils.ReadProperties;

/**
* 异步上传控制器
* @author wkr
* @Date 2016-12-12
*
*/
@Controller
@RequestMapping(value = "/whiteListRule")
public class WhiteListRuleController {

//log4j
private Logger log =Logger.getLogger(AddCustomerDataController.class);

//存储图片路径
private String fileUploadPath = PropertyUtil.getProperty("file_upload");

//读取图片路径
private String fileReadPath = PropertyUtil.getProperty("file_url");

@Resource
private IGameService gameService; //Game

/**
* 上传图片
* @param gameId 参数
* @param multipart 文件
* @param request
* @return
*/
@RequestMapping(value="/saveImg")
@ResponseBody
public String saveImgMethod(
@RequestParam(value = "gameId") String gameId,
@RequestParam(value="fileImg") MultipartFile multipart,
HttpServletRequest request
){
String path = null;
File upload = null; //已经保存文件的全路径
String img = null; //存储数据库路径
String readPath = null; //读取路径

//返回信息
String msg = "";
String error = "";

try {
//存储路径
path = fileUploadPath + Constant.FILE_PATH;

//存储本地文件夹
upload = ReadProperties.upload(multipart, path);

//存储数据库路径
img = Constant.FILE_PATH + "/" + upload.getName();

//读取路径
readPath = fileReadPath + Constant.FILE_PATH + "/" + upload.getName();

//限制图片大小
int ruleHeight = 400;
int ruleWidth = 750;
int deviation = 100;//误差

BufferedImage sourceImg = ImageIO.read(new FileInputStream(upload));
int imgHeight = sourceImg.getHeight();//图片高
int imgWidth = sourceImg.getWidth();//图片宽

if (Math.abs(ruleWidth - imgWidth) <= deviation && Math.abs(ruleHeight - imgHeight) <= deviation) {
gameService.updateByPrimaryKeySelective(new Game(gameId, img));
msg = "上传成功!";
}else {
error = "图片不符合规定误!";
}

} catch (Exception e) {
error = "文件保存本地失败!";
log.error("文件保存本地失败!", e);
}

String res = "{ error:'" + error + "', msg:'" + msg + "',imgurl:'" + readPath + "'}";
return res;
}
}

<body>
<!-- 异步上传图片 -->
<b>背景图片(建议图片大小750&Chi;400,允许误差100已内)</b>
<br>
<img id="img1" alt="上传成功后显示图片" src="${fileUrl }${game.imageUrl1}">
<br>
<input id="fileImg" type="file" name="fileImg" size="80" />
<input id="saveImg" type="button" value="上传图片" />
</body>

ajaxfileupload原理及用法,主要用于即想用ajax序列化传递参数,又必须上传文件的更多相关文章

  1. 【转】JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现a ...

  2. JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    太久没写博客了,真的是太忙了.善于总结,进步才会更快啊.不多说,直接进入主题. 前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错 ...

  3. struts2 jquery ajaxFileUpload 异步上传文件

    网上搜集的,整理一下. 一.ajaxFileUpload 实现异步上传文件利用到了ajaxFileUpload.js这个文件,这是别人开发的一个jquery的插件,可以实现文件的上传并能够和strut ...

  4. springmvc+ajaxFileUpload上传文件(前后台彻底分离的情况下)

    首先是导入jar包: web.xml: <servlet> <servlet-name>mvc-dispatcher</servlet-name> <serv ...

  5. JQuery插件ajaxFileUpload 异步上传文件

    一.先对ajaxFileUpload插件的语法参数进行讲解 原理:ajaxfileupload是通过监听iframe的onload方法来实现, 当从服务端处理完成后,就触发iframe的onload事 ...

  6. atitit.ajax上传文件的实现原理 与设计

    atitit.ajax上传文件的实现原理 与设计 1. 上传文件的三大难题 1 1.1. 本地预览 1 1.2. 无刷新 1 1.3. 进度显示 1 2.  传统的html4  + ajax 是无法直 ...

  7. jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)

    第四弹的诞生完全不在自己最初的计划之中,是有个网友看了先前关于<ajaxfileupload.js系列>的文章后提出的问题,由于自己一直是用chrome浏览器去测试demo,完全忽略IE浏 ...

  8. jquery ajaxFileUpload异步上传文件

    ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http:/ ...

  9. 使用ajaxfileupload.js上传文件

    一直以来上传文件都是使用form表单上传文件,也看到过有人使用js上传文件,不过看起来蛮简单的也就没有怎么去理会.今天突然要使用这种方式上传文件,期间还遇到点问题.因此就记录下来,方便以后遇到这样的问 ...

随机推荐

  1. BZOJ 2839: 集合计数 [容斥原理 组合]

    2839: 集合计数 题意:n个元素的集合,选出若干子集使得交集大小为k,求方案数 先选出k个\(\binom{n}{k}\),剩下选出一些集合交集为空集 考虑容斥 \[ 交集为\emptyset = ...

  2. vue端口号被占用如何解决

    vue端口占用问题 1. vue init webpack-simple#1.0 vue-webpack-simple-demo 2. cd vue-webpack-simple-demo 3. cn ...

  3. Getting the pixel coordinates of text or ticks in matplotlib

    The exact pixel coordinates of title, labels, legends or ticks are important information for the tra ...

  4. Redis简介及使用详解

    一.Redis的简介 在缓存技术里面相对于memcache来说,redis逼格更高,原因redis不单单只是做缓存,它更能相对memcache更加广泛,但是也是因不同的项目而用,redis的 一个内存 ...

  5. CocosCreator游戏开发---菜鸟学习之路(一)

    PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...

  6. fifteen-puzzle

    http://www.math.ubc.ca/~cass/courses/m308-02b/projects/grant/fifteen.html http://jamie-wong.com/2011 ...

  7. [Swift]UIKit学习之警告框:UIAlertController和UIAlertView

    Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated.) T ...

  8. 手机APP中使用history.back()返回没有效果的解决

    样式是一个超链接A标签,通过点击事件来达到返回上一页的效果. 所以通常做饭是把A标签的href写成#,然后onClick事件,刚开始我只是当成一个普通点击事件,然后使用JS进行返回. 写法如下: &l ...

  9. Android硬件编解码与软件编解码

           最近做了一个android项目用到编解码功能.大概需求是:通过摄像头拍摄一段视频,然后抽帧,生成一个短视频,以及倒序视频,刚开始直接用 H.264 编码格式,没有使用MP4容器封装.做了 ...

  10. CodeFirst+MySQL+.Net Core配置详情

    EF 基础操作:http://www.cnblogs.com/M-LittleBird/p/5852395.html 一.使用CodeFirst模式 1.在需要添加的项目上右键点击选择添加ADD.NE ...