您的位置:首页 > 产品设计 > UI/UE

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上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐