问题
后台在接收浏览器的文件上传请求, SpringMVC控制器里报错,提示如下
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]: Specified class is an interface
前端代码
<form id="uploadForm" name="uploadForm" action="../upload/upfile" method="post" enctype="multipart/form-data">
附件:<input type="file" id="file" name="file">
<input type="button" value="上传" onclick="uploadFile()">
</form>
java后端代码
@Controller("uploadController")
@RequestMapping(value="/upload")
public class UploadController extends MyController {
private static Logger logger = LoggerFactory.getLogger(UploadController.class);
/**
* 上传文件
*/
@RequestMapping(value="/upfile")
public ResponseEntity<String> upload(MultipartFile fileUpLoad, HttpServletRequest request) {
try {
String filename = fileUpLoad.getOriginalFilename();
ServletContext servletContext = request.getServletContext();
String realPath = servletContext.getRealPath("upload");
File file = new File(realPath);
//判断realPath对应的路径是否存在
if (!file.exists()){
//不存在就创建
file.mkdir();
}
filename = FileUtil.newFileName(filename);
String finalPath = realPath + File.separator + filename;
fileUpLoad.transferTo(new File(finalPath));
logger.info("上传成功:{}" , finalPath);
return renderData(true,"上传成功",filename);
} catch (Exception e) {
e.printStackTrace();
logger.error("上传异常:{}" , e);
return renderData(true,"上传异常."+ e.getMessage(),null);
}
}
}
解决方法
后端把
public ResponseEntity<String> upload(MultipartFile fileUpLoad, HttpServletRequest request)
删除掉,改成
public ResponseEntity<String> upload(HttpServletRequest request, @RequestParam(value="file") CommonsMultipartFile fileUpLoad) {
问题解决。
后记
对于文件上传/下载的处理 有很多实现方案,前端有jquery.ajaxFileUpload 或 form.submit或第三方组件调用, java后端有用 sturt, sevlet, 或springMVC 的, 使得写法多种多样,问题也多种多样,后期将打算提供一些相关例子分享给大家。