不多废话,直接上代码:
JSP代码:
<html>
<body><form method="POST"enctype="multipart/form-data"
action="/apiV2/upload/pic">
File to upload: <input type="file" name="name"><br />
Name: <input type="text" name="nam"><br /> <br /> <input type="submit"
value="上传"> Press here to upload the file!
</form>
</body>
</html>
JAVA代码
String name = request.getParameter("name");
断点跟踪,结果name为null空,导致下面的
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile mFile = multipartRequest.getFile(name);
mFile也为空
查了一天,别人遇到类似问题的原因和解决方案大致总结如下:
1.属性名写错,name="name"引号里应该是name
2.文件上传时,需在表单form中添加属性ENCTYPE="multipart/form-data"(意思是:设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传。只有使用了 multipart/form-data,才能完整的传递文件数据)。但是,设置ENCTYPE="multipart/form-data"后,servlet中除了file类型表单能获取到,其他value通过request.getParameter()方法获得的值为null。(这个看着比较靠谱)
3.用第三方控件传图片
4.后来想了个办法,修改后代码如下:
- <form action="MyServlet" method="post" enctype="multipart/form-data"
- onsubmit="return validForm(this)">
- <input type="text" name="name"/>
- <input type="file"/>
- <input type="submit"/>
- <form>
- <script type="text/javascript">
- function validForm(fm){
- fm.action = fm.action + "?name=" + fm['name'].value;
- return true;
- }
- </script>
大家可以根据自己的问题对号入座,选择适合自己的解决办法
对于1,发现并没有写错
对于2,其实我一开始是相信的
对于3,由于我太懒,就没有用第三方控件
对于4,尝试并没有解决我的问题
还有就是直接获取文件流,但是获得的流解析不出图片
但是线上代码运行无误,且没用第三方控件,迫使我继续寻求解决方案。通过不断尝试,得出解决方案如下注意对比:
JSP代码:
<html>
<body><form method="POST"enctype="multipart/form-data"
action="/apiV2/upload/pic">
File to upload: <input type="file" name="upload"><br />
Name: <input type="text" name="name" value=“upload”><br /> <br /> <input type="submit"
value="上传"> Press here to upload the file!
</form>
</body>
</html>
对,就是本菜鸟把js写错了!!!希望遇到类似问题的朋友可以得到启发,也希望大牛多多指教!
PS.还有一种解决方案:
public @ResponseBody String uploadImg(HttpServletRequest request, @RequestParam("upload") MultipartFile file) 直接把file绑upload上。