图片上传功能很多地方都有用到,最典型的就是上传头像,上传身份证什么的。
本篇博客介绍springmvc框架上面org.springframework.web.multipart.commons.CommonsMultipartResolver的上传文件功能(使用ajax提交,本篇不介绍压缩,可能的话也是后端压缩):
1、首先pom文件要导入一些jar包
<!-- 上传组件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency>
2、要确定springmvc中配置了这个功能(图片上传其实就是文件上传)

3、然后我们来写前端代码:
元素(一个隐藏域是用来保存后端返回的服务器上面图片路径。比如:/images/123213213.jpg):
重点:form表单上enctype="multipart/form-data"一定要加
<form method="post" id="signupForm" enctype="multipart/form-data">
<input type="file" id="img" name="img"/>
<img id="picture" style="width:400px;height:400px;display:none" /> <input type="hidden" name="headImg" id="headImg"/>
</form>
js代码如下:
因为是ajax提交的,所以要导入<script type="text/javascript" src="../sources/js/jquery.form.js"></script>插件。
<script>
$(function(){
var prefixUrl="localhost:8081";
$("#img").change(function(){
upload(prefixUrl)
})
})
function upload(prefixUrl){
var options={
type:"post",
url:"http://"+prefixUrl+"/uploadImg",
dataType:"json",
cache:false,
success:function(data){
$("#picture").attr("src","http://"+data.webUrl)
$("#picture").show()
$("#headImg").val(data.path)
}
}
$("#signupForm").ajaxSubmit(options)
}
</script>
4、controller代码:
@RequestMapping(value="/uploadImg",method={RequestMethod.POST})
public @ResponseBody String uploadImg(HttpServletRequest request,@RequestParam(value="img") MultipartFile pic){
// String username=request.getParameter("username");
// Integer count=userService.insert(username, password);
//获取图片原始文件名
String originalFileName=pic.getOriginalFilename();
String name=""+System.currentTimeMillis();
//获取后缀
String extension=originalFileName.substring(
originalFileName.lastIndexOf("."), originalFileName.length());
//相对路径
String path="/WEB-INF/sources/upload/"+name+extension;
//绝对路径
String url=request.getSession().getServletContext().getRealPath("")+path;
//网站路径
String webUrl=request.getRequestURL()+path;
webUrl=webUrl.replaceAll("http://", "").replaceAll("/uploadImg/WEB-INF", "");
webUrl="{\"webUrl\":\""+webUrl+"\",\"path\":\"/sources/upload/"+name+extension+"\"}";
File dir=new File(url);
if(!dir.exists()){
dir.mkdirs();
}
//上传图片
try {
pic.transferTo(new File(url));
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
return webUrl;
}
结果:


