Balalala 2015-04-13
1,在页面
<script type="text/javascript" src="js/jquery/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/jquery/ajaxfileupload.js"></script>
<script type="text/javascript">
function uploadimg(obj,id){
$.ajaxFileUpload({
url:'uploadImg.do', secureuri:false, //是否启用安全提交,默认为false
fileElementId:'file'+id, //文件选择框的id属性
dataType:'text', //服务器返回的格式,可以是json或xml等
success:function(data,status){ //服务器响应成功时的处理函数
data = data.replace("<PRE>", ''); //ajaxFileUpload会对服务器响应回来的text内容加上<pre>text</pre>前后缀
data = data.replace("</PRE>", '');
data = data.replace("<pre>", '');
data = data.replace("</pre>", '');
if(data.substring(0, 1) == 1){
$("#img"+id).attr("src",data.substring(2));
}
},
error:function(data, status, e){
console.log("上传失败!");
}
});
//file控件只能激发一次,要重新加载
var nf = obj.cloneNode(true);
nf.value='';
obj.parentNode.replaceChild(nf, obj);
}
</script>
<input type="file" id="file1" class="file" name="myfile" onchange="uploadimg(this,1)"/>2,后台Controller
@RequestMapping(value="/uploadImg",produces="text/plain;charset=UTF-8")
@ResponseBody
public String uploadImg(MultipartFile myfile, HttpServletRequest request) throws IOException{
System.out.println("文件开始上传开始");
String realPath = request.getSession().getServletContext().getRealPath("/upload");
String originalFilename = null;
if(myfile.isEmpty()){
System.out.println("上传失败!");
return "0^上传失败,上传文件为空";
}else{
if("image/jpeg".equals(myfile.getContentType())){
originalFilename = myfile.getOriginalFilename();
try {
FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(realPath, originalFilename));
} catch (IOException e) {
System.out.println("上传失败!");
e.printStackTrace();
return "0^上传失败,文件保存失败";
}
}else{
System.out.println("上传失败!");
return "0^上传失败,文件不是指定的类型";
}
}
//因为在Windows下<img src="file:///D:/aa.jpg">能被firefox显示,而<img src="D:/aa.jpg">firefox是不认的
System.out.println("上传成功!");
System.out.println(originalFilename);
return "1^"+request.getContextPath() + "/upload/" + originalFilename;
}附件中有我用的ajaxfileupload.js
本来我是想要json来着,但弄了好长时间没成功,就选text吧!!!
为了美观,把 type="file" 控件隐藏。点击“上传”按钮,click调用隐藏文件控件,再选择文件。查了一遍,好像是ie为了安全控制,文件的必须鼠标点击过后,才能提交。还没有想到其他的方法。。。
5,success 提交成功后自动执行的处理函数,参数data就是服务器返回的数据。6,error 提交失败自动执行的处理函数。7,data 自定义参数。fileElementId: 'file1',
-- 引入相关的js文件,相对路径 -->. -- 执行上传文件操作的函数 -->. method=uploader', //需要链接到服务器地址。fileElementId:'houseMaps',