文件上传不使用弹簧forms在spring mvc中工作

我有一个jsp页面,其中我使用了spring form标签,以便我可以使用模型属性并将数据绑定到它。 它在提交表单时工作正常,但在添加enctype="multipart/form-data"模型属性会向控制器返回null。 这有什么不对? 我的代码是 – proflie.jsp

   

AccountController类

 package com.vc.teacher.controller; import java.io.File; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.vc.teacher.db.dao.UserDao; import com.vc.teacher.entities.User; import com.vc.teacher.util.Constants; @Controller public class AccountController { @Autowired UserDao userDao; @RequestMapping("/login") public String loginUser(@RequestParam("email") String email, @RequestParam("password") String password, Model model) { User user = userDao.checkCreditionals(email, password); if (user != null) { model.addAttribute("user", user); return "jsp/profile"; } else { model.addAttribute("error", "Wrong creditionals"); return "jsp/signin"; } } @RequestMapping("/signUp") public String initilize(Model model) { model.addAttribute(new User()); return "jsp/signup"; } @RequestMapping(method = RequestMethod.POST, value = "/register") public String signUpUser(User user, RedirectAttributes attributes) { boolean result = false; File imageFile = null; try { imageFile = user.getImageFile(); if (imageFile != null) { File imageFileSave = new File(Constants.MEDIA_FILE_PATH); FileUtils.copyFile(imageFile, imageFileSave); user.setImageFileName(imageFile.getName()); } user.setStatus("Deactive"); result = userDao.registerUser(user); if (result == true) { attributes.addFlashAttribute("message", "You are ready to go now !"); return "redirect:/signUp"; } else { attributes.addFlashAttribute("message", "Something went wrong"); return "redirect:/signUp"; } } catch (Exception e) { attributes.addFlashAttribute("message", "Something went wrong"); return "redirect:/signUp"; } } @RequestMapping(method = RequestMethod.POST, value = "/update") public String updateUser(User user, RedirectAttributes attributes) { boolean result = false; File imageFile = null; try { System.out.println("=================================="+user.getEmail()); System.out.println("=================================="+user.getId()); System.out.println("=================================="+user.getFirstName()); imageFile = user.getImageFile(); if (imageFile != null) { File imageFileSave = new File(Constants.MEDIA_FILE_PATH); FileUtils.copyFile(imageFile, imageFileSave); user.setImageFileName(imageFile.getName()); } user.setStatus("Active"); result = userDao.updateUser(user); if (result == true) { attributes.addFlashAttribute("message", "Profile Updated !"); return "jsp/profile"; } else { attributes.addFlashAttribute("message", "Something went wrong"); return "jsp/profile"; } } catch (Exception e) { attributes.addFlashAttribute("message", "Something went wrong"); return "jsp/profile"; } } } 

DispatcherServlet本身不知道如何处理多部分表单数据; 这就是我们需要多部分解析器的原因。

你应该在你的servlet-config中注册它:

     

在User对象中使用CommonsMultipartFile或MultipartFile而不是File:

 private CommonsMultipartFile imageFile; 

您可以尝试使用此代码来保存文件:

 File imageFileSave = new File(Constants.MEDIA_FILE_PATH); FileUtils.writeByteArrayToFile(imageFileSave , imageFile.getBytes());