java Web 文件上传
注意:请求实体过大的问题,请修改Nginx服务器的大小(百度参考413 Request Entity Too Large 的解决方法)
jsp:<input type="file" style="height: 114px;width: 100%;position: absolute;opacity: 0;" name="file1" id="file1" >
$(function(){ $("#file1").change(function(){ //创建FormData对象 var data = new FormData(); //为FormData对象添加数据 $.each($('#file1')[0].files, function(i, file) { data.append('upload_file', file); }); $.ajax({ url:'${pageContext.request.contextPath}/uploadImage', type:'POST', data:data, cache: false, contentType: false, //不可缺 processData: false, //不可缺 success:function(data){ //显示追加 var imgUrl="/"+data; var showImg = "<div class='img-item'>" + "<img src='" + imgUrl + "'>" + "<span class='close-item iconfont'></span>" + "</div>"; $("#addImg").before(showImg); //数据追加 var inputImg = "<input type='hidden' name='postImage'value='" + imgUrl + "' >"; $("#typeId").after(inputImg); } }); }); });
java后台部分:
1 @RequestMapping(value = "/uploadImage", method = RequestMethod.POST) 2 @ResponseBody 3 public String uploadImage(HttpServletRequest request) throws IOException { 4 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request; 5 Iterator<String> iterator = multipartRequest.getFileNames(); 6 String fileName = ""; 7 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 8 String dir = "upload/" + sdf.format(new Date()) + "/"; 9 String realPath = request.getSession().getServletContext().getRealPath("/"); 10 while(iterator.hasNext()){ 11 MultipartFile multipartFile = multipartRequest.getFile(iterator.next()); 12 if(multipartFile != null){ 13 String fn = multipartFile.getOriginalFilename(); 14 String suffix = fn.substring(fn.lastIndexOf(".")); 15 fileName = dir + Utils.getRandomStringByLength(6) + suffix; 16 String path = realPath + fileName; 17 path = path.replace("\\", "/"); 18 File f = new File(path); 19 if(!f.mkdirs()){ 20 f.mkdir(); 21 } 22 multipartFile.transferTo(f); 23 } 24 } 25 return fileName; 26 } 27 // 上面方法需要用到下面的方法 28 public String getRandomStringByLength(int length) { 29 String base = "abcdefghijklmnopqrstuvwxyz0123456789"; 30 Random random = new Random(); 31 StringBuffer sb = new StringBuffer(); 32 for (int i = 0; i < length; i++) { 33 int number = random.nextInt(base.length()); 34 sb.append(base.charAt(number)); 35 } 36 return sb.toString(); 37 }