过了三天才想要写博客,这样不好,要改正
在做毕设的时候,用户发帖涉及到了文件上传的问题,在这里记录一下
背景:
在用户发帖的时候,用户只想发表文字postText,还有些用户想在发表postText的同时还发表一些图片,如何做?
上代码
不写的太细了,和流水账似的,挑重点记录一下。
1.前台的文件上传
本来想用form表单直接上传了,但是form提交时会刷新整个页面,但这不是我想要的,所以使用了ajax提交form表单。
利用ajax提交表单需要用到jquery.form.js这个包,网上有很多这个包的介绍
先看一下form表单的部分,很简单,只是单纯地记录一下。
1 <form id="sendform" action="" method="post" > 2 <div class="row"> 3 <div class="col-xs-2 post-label"> 4 子主题名称: 5 </div> 6 <div class="col-xs-10"> 7 <input type="text" name="menuName" id="menuName" value="${menu.menuName }" /> 8 </div> 9 </div> 10 <div class="row"> 11 <div class="col-xs-2 post-label"> 12 帖子标题: 13 </div> 14 <div class="col-xs-10"> 15 <input type="text" name="postName" id="postName" placeholder="帖子的标题" value="" /> 16 </div> 17 </div> 18 <div class="row"> 19 <div class="col-xs-2 post-label"> 20 帖子内容: 21 </div> 22 <div class="col-xs-10"> 23 <textarea rows="10" name="postText" class="post-area" id="content" placeholder="请输入帖子内容"></textarea> 24 </div> 25 </div> 26 <div class="row"> 27 <div class="col-xs-2 post-label"> 28 选择图片: 29 </div> 30 <div class="col-xs-10" > 31 <input type="file" name="file" id="fileRdc" /> 32 </div> 33 </div> 34 <div class="row"> 35 <div class="col-xs-2"> 36 </div> 37 <div class="col-xs-10"> 38 <button type="button" class="btn btn-primary" id="tijiaoPost" >提交</a> 39 <button type="button" class="btn btn-default" id="resetSendPost">清空</button> 40 </div> 41 </div> 42 </form>
重点来了,重点,重点,重点(重要的事情说三遍!)
ajax提交带文件上传的form表单
1 <script src="assets/js/jquery-1.10.2.min.js"></script> 2 <script src="assets/js/jquery.form.js"></script> 3 <script type="text/javascript"> 4 $(function(){ 5 //点击提交按钮是将form通过AJAX提交 6 $("#tijiaoPost").click(function(){ 7 //alert( $("#sendform").ajaxSubmit); 8 //判断文件部分是否有文件 9 alert(‘$("#fileRdc").val()---->‘+$("#fileRdc").val()) 10 alert($("#fileRdc").val()==‘‘); 11 if($("#fileRdc").val()==null || $("#fileRdc").val() == ‘‘){ 12 //这里是ajax要将form表单提交的方法,一个只传postText另一个带了文件上传 13 ajaxFile("${pageContext.request.contextPath}/sendPostText.do"); 14 }else{ 15 ajaxFile("${pageContext.request.contextPath}/sendPostFile.do"); 16 } 17 }) 18 }); 19 function ajaxFile(url){ 20 $("#sendform").ajaxSubmit({ 21 url: url, 22 type: "post", 23 enctype:‘multipart/form-data‘, 24 success: function(data) { 25 alert(‘成功! ‘); 26 page(1); 27 } 28 }); 29 } 30 </script>
2.后台部分利用两个controller方法接收ajax提交的form
1 @RequestMapping("/sendPostFile") 2 public String sendPostFile(HttpSession session,HttpServletRequest req,String menuName,String postName,String postText,@RequestParam(value="file",required = false) MultipartFile file) throws IllegalStateException, IOException{ 3 //获取userId和userName 4 User user = (User)session.getAttribute("userSession"); 5 int userId = user.getUserId(); 6 String userName = user.getUserName(); 7 //传入表单中的menuName查出对应的menuId 8 Menu menu = sendPostService.selectMenuId(menuName); 9 int menuId = menu.getMenuId(); 10 //调用sendPostService的sendPost方法将帖子信息存入到数据库中 11 int postId = sendPostService.sendPost(postName, menuId, userId, userName, postText); 12 13 if(file != null ){ 14 //文件上传部分 15 //照片名字 16 String picFileName = StringUtils.newUUID(); 17 //上传地址 18 String path =req.getRealPath("/assets/images/fileupload"); 19 File picFile = new File(path,picFileName); 20 //先新建一个空白文件 21 picFile.createNewFile(); 22 //保存文件 23 file.transferTo(picFile); 24 sendPostService.insertPicture(picFileName, userId, userName, postId); 25 } 26 return TIEZI; 27 } 28 @RequestMapping("/sendPostText") 29 public String sendPostText(HttpSession session,HttpServletRequest req,String menuName,String postName,String postText) throws IllegalStateException, IOException{ 30 return sendPostFile(session, req, menuName, postName, postText, null); 31 }
利用ajax提交带文件上传的form表单就这些了。
好好学习,天天向上!
时间: 2024-11-14 22:09:29