string name = request.getParameter("name"); JAVA上传图片文件name返回空null解决办法
2016-09-22 18:42
861 查看
不多废话,直接上代码:
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.后来想了个办法,修改后代码如下:
Html代码
<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>
Js代码
<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上。
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.后来想了个办法,修改后代码如下:
Html代码
<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>
Js代码
<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上。
相关文章推荐
- struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
- request.getParameter("name")什么时候获取的参数是null,什么时候为""空字符串
- (转)struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因(转http://topic.csdn.net/u/20101210/11/78454a19-7
- request.getParameter("name")获取参数为null和""空字符串的区别
- Java调用Document.getElementById方法返回null的解决办法
- String baseprice = request.getParameter("baseprice")==null相关问题
- 解决文件图片等上传DebugFilesKeyError: You tried to access the file "file" in the request
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- Java调用Document.getElementById方法返回null的解决办法
- 解决var url="xxx&参数名="+“中文参数”; 传到后台根据String x = request.getParameter("中文参数名");乱码问题
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- Java调用Document.getElementById方法返回null的解决办法
- URL 中文传参,JAVA后台 request.getParameterMap()乱码的解决办法
- 关于在Java中使用request.getRequestDispatcher(".....")引起的css文件无效或图片无效问题。
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因
- jspSmartUpload控件上传文件并附带参数 解决request.getParameter()得不到参数
- .jsp文件在tomcat运行,提示 Attribute value request.getParameter("name") is quoted with " which must be escap
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决