下面是详细讲解“springMVC使用ajaxFailUpload上传图片的方法”的完整攻略。
准备工作
在开始之前,需要先确保你已完成以下准备工作:
- 安装好了JDK和Maven。
- 在项目中引入了springMVC、spring、Jackson、commons-fileupload、commons-io等相关依赖库。
- 在jsp页面中引入ajaxFailUpload的引用。
实现步骤
第一步:编写Controller
在SpringMVC的Controller中,我们需要定义一个处理文件上传的方法。其中,@ResponseBody注解用于返回JSON对象,@RequestMapping注解映射客户端请求路径,@RequestParam注解用于接收客户端上传的文件,具体如下:
@ResponseBody
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public Map<String, Object> ajaxUpload(@RequestParam("file") MultipartFile file) throws IOException {
Map<String, Object> jsonMap = new HashMap<>();
// 业务逻辑处理
return jsonMap;
}
第二步:编写页面代码
下面是一个简单的上传文件的示例代码:
<!DOCTYPE html>
<html>
<head>
<title>AjaxFailUpload Demo</title>
<meta charset="utf-8">
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script src="/js/ajaxFailUpload.js"></script>
<style type="text/css">
body {
margin: 0;
padding: 0;
background-color: #f2f2f2;
}
.upload-wrap {
width: 500px;
margin: 20px auto;
padding: 20px;
background-color: #fff;
box-shadow: 0px 0px 10px #888888;
}
h3 {
margin-top: 0;
}
.progress {
margin: 10px 0 0 0;
height: 5px;
background-color: #ccc;
overflow: hidden;
width: 100%;
float: left;
}
.bar {
width: 0%;
height: 100%;
float: left;
background-color: #0BA4E6;
}
.error {
color: red;
}
</style>
</head>
<body>
<div class="upload-wrap">
<h3>AjaxFailUpload Demo</h3>
<form id="upload-form" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="button" value="上传" id="upload-btn">
</form>
<div class="progress">
<div class="bar"></div>
</div>
<div id="upload-msg"></div>
</div>
<script>
$(document).ready(function () {
$('#upload-btn').click(function () {
var formData = new FormData($('#upload-form')[0]);
$.ajaxFailUpload({
url: "/upload",
type: "POST",
data: formData,
dataType: 'json',
beforeSend: function () {
$('.bar').width('0%');
$('#upload-msg').empty();
},
xhr: function () {
var xhr = $.ajaxSettings.xhr();
if (xhr.upload) {
xhr.upload.onprogress = function (event) {
var percent = event.loaded / event.total * 100;
$('.bar').width(percent + '%');
};
xhr.upload.onload = function (event) {
$('.bar').width('100%');
};
}
return xhr;
},
success: function (data) {
$('#upload-msg').addClass('error').html(data.msg);
},
error: function () {
$('#upload-msg').addClass('error').html("上传失败,请重试。");
},
cache: false,
contentType: false,
processData: false
});
});
});
</script>
</body>
</html>
第三步:测试上传
至此,一个简单的文件上传就完成了。你可以打开浏览器访问上传页面,上传一个文件,然后查看服务器响应结果。
示例说明
下面给出两个关于ajaxFailUpload的使用示例。
示例一:上传文件并返回文件路径
在Controller中,你可以进一步处理上传文件的结果,并返回一个字符串代表上传成功。以下是示例代码:
@ResponseBody
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public Map<String, Object> ajaxUpload(@RequestParam("file") MultipartFile file) throws IOException {
Map<String, Object> jsonMap = new HashMap<>();
try {
// 存储文件到服务器
String filepath = "D://file_upload/" + file.getOriginalFilename();
file.transferTo(new File(filepath));
// 返回客户端的JSON消息
jsonMap.put("success", true);
jsonMap.put("msg", "上传成功");
jsonMap.put("result", filepath);
} catch (Exception e) {
jsonMap.put("success", false);
jsonMap.put("msg", "上传失败:" + e.getMessage());
}
return jsonMap;
}
在客户端代码中,则需要处理上传成功后返回的JSON消息。以下是示例代码:
success: function (data) {
if (data.success) {
$('#upload-msg').html("上传成功!文件路径为:" + data.result);
} else {
$('#upload-msg').addClass('error').html(data.msg);
}
}
示例二:上传多个文件
在Controller中上传多个文件的方法与上传单个文件的方法类似,唯一的区别是:需要使用MultipartFile[]来接收上传的多个文件。以下是示例代码:
@ResponseBody
@RequestMapping(value = "/uploadMulti", method = RequestMethod.POST)
public Map<String, Object> ajaxUploadMulti(@RequestParam("file") MultipartFile[] files) throws IOException {
Map<String, Object> jsonMap = new HashMap<>();
try {
for (MultipartFile file : files) {
// 存储文件到服务器
String filepath = "D://file_upload/" + file.getOriginalFilename();
file.transferTo(new File(filepath));
}
// 返回客户端的JSON消息
jsonMap.put("success", true);
jsonMap.put("msg", "上传成功");
} catch (Exception e) {
jsonMap.put("success", false);
jsonMap.put("msg", "上传失败:" + e.getMessage());
}
return jsonMap;
}
在客户端代码中,多文件上传则需要使用FormData对象来存储多个文件。以下是示例代码:
$('#upload-btn-multi').click(function () {
var formData = new FormData();
for (var i = 0; i < $('#file-multi')[0].files.length; i++) {
formData.append('file', $('#file-multi')[0].files[i]);
}
$.ajaxFailUpload({
url: "/uploadMulti",
type: "POST",
data: formData,
dataType: 'json',
beforeSend: function () {
$('.bar').width('0%');
$('#upload-msg-multi').empty();
},
xhr: function () {
var xhr = $.ajaxSettings.xhr();
if (xhr.upload) {
xhr.upload.onprogress = function (event) {
var percent = event.loaded / event.total * 100;
$('.bar').width(percent + '%');
};
xhr.upload.onload = function (event) {
$('.bar').width('100%');
};
}
return xhr;
},
success: function (data) {
if (data.success) {
$('#upload-msg-multi').html("上传成功!");
} else {
$('#upload-msg-multi').addClass('error').html(data.msg);
}
},
error: function () {
$('#upload-msg-multi').addClass('error').html("上传失败,请重试。");
},
cache: false,
contentType: false,
processData: false
});
});
希望这个攻略对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springMVC使用ajaxFailUpload上传图片的方法 - Python技术站