圖片上傳功能很多地方都有用到,最典型的就是上傳頭像,上傳身份證什么的。
本篇博客介紹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;
}
結果:


