string name = request.getParameter("name"); JAVA上传图片文件name返回空null解决办法

不多废话,直接上代码:

JSP代码:




      action="/apiV2/upload/pic">
    File to upload:
 
    Name:

                                                     value="上传"> Press here to upload the file!



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代码   收藏代码
  1. <form action="MyServlet" method="post" enctype="multipart/form-data"    
  2.                                        onsubmit="return validForm(this)">  
  3.     <input type="text" name="name"/>  
  4.     <input type="file"/>  
  5.     <input type="submit"/>  
  6. <form>  

Js代码   收藏代码
  1. "text/javascript">  
  2.     function validForm(fm){  
  3.        fm.action = fm.action + "?name=" + fm['name'].value;  
  4.        return true;  
  5.     }  
  6.  

大家可以根据自己的问题对号入座,选择适合自己的解决办法

对于1,发现并没有写错

对于2,其实我一开始是相信的

对于3,由于我太懒,就没有用第三方控件

对于4,尝试并没有解决我的问题

还有就是直接获取文件流,但是获得的流解析不出图片

但是线上代码运行无误,且没用第三方控件,迫使我继续寻求解决方案。通过不断尝试,得出解决方案如下注意对比:

JSP代码:




      action="/apiV2/upload/pic">
    File to upload:
 
    Name:

                                                     value="上传"> Press here to upload the file!



对,就是本菜鸟把js写错了!!!希望遇到类似问题的朋友可以得到启发,也希望大牛多多指教!

PS.还有一种解决方案:

 public @ResponseBody String uploadImg(HttpServletRequest request, @RequestParam("upload") MultipartFile file) 直接把file绑upload上。

你可能感兴趣的:(程序之美美不胜收)