获取的key值都为null?

获取的key值都为null?

/**
 * 处理上传文件的工具类
 * @author Administrator
 *
 */
public class UploadUtils {
 //存储页面中所有参数的集合
  private static Map<String,Object> params = new HashMap<String,Object>();
 
 //将上传的文件存储到 Map集合当中
 public static Map<String,Object> UploadFile(HttpServletRequest request,String uploadDirectory) throws IOException {
  try {
   //创建一个FoodDaolmpl对象
   FoodDaolmpl foodDaolmpl = new FoodDaolmpl();
   //1、创建一个磁盘文件项工厂类对象
   DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
   //2、创建一个核心解释类
   ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
   //3、解析request请求,返回的是List集合,List中存放的是FileItem对象
   List<FileItem> list = servletFileUpload.parseRequest(request);
   
   //遍历这个List集合,获得每一个FileItem,判断是表单项还是文件上传项
   for(FileItem fileItem : list) {
    //这个if用于判断是否是普通项
    if(fileItem.isFormField()) {
     //接收普通项的值
     String name = fileItem.getName();//获取表单项的名称
     System.out.println(name);
     //获取表单项的值,且返回utf-8编码格式
     String value = fileItem.getString("UTF-8");
     //将普通表单项的数据存储到map集合中
     params.put(name,value);
     for(Map.Entry<String, Object> entry : params.entrySet()) {
      String key = entry.getKey();
      String value1 = (String) entry.getValue();
      System.out.println(key+"    "+value1);
     }
//     System.out.println(params.toString());
    } else {
     //这是文件上传项
     //获取该文件上传的名称
//     String fileName = fileItem.getName();
     //
    }
   }
  } catch (FileUploadException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  Food food = new Food();
  food.setId((String)(params.get("id")));
  return null;
  
 }
}

http://img1.sycdn.imooc.com//climg/5aa888a4000119ce19201080.jpg

测试输出name 值的时候发现全为null 值?  如何解决

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

一般遇到这种问题,可以将url的值在控制台输出看看,就会发现url是很长一串内容。出错原因就是url拼接错了。将url = uploadDirectory + "//" + fileItem;改为url = uploadDirectory + "\\" + uuidFileName;

祝学习愉快!

  • 荒小北158 提问者 #1
    昨天又刷了一遍案例视频 这个"\\"问题我修正过 修正过之后才报的文件路径有问题
    2018-03-16 09:30:18
  • 好帮手慕珊 回复 提问者 荒小北158 #2
    不只是\\有问题,后面的内容之前你写到是fileItem,应该改成文件名uuidFileName
    2018-03-16 09:51:37
  • 荒小北158 提问者 回复 好帮手慕珊 #3
    我我我我我我......谢谢老师
    2018-03-16 10:11:15
提问者 荒小北158 2018-03-15 15:48:44
三月 15, 2018 3:44:01 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [com.imooc.servlet.addFoodServlet] in context with path [/MyWork] threw exception
java.io.FileNotFoundException: D:\Java EEproject\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyWork\upload\name=C:\Users\Administrator\Desktop\caipin\2.png, StoreLocation=C:\Users\ADMINI~1\AppData\Local\Temp\upload_56fcd0bb_162289da0be__8000_00000003.tmp, size=155255bytes, isFormField=false, FieldName=foodImage (文件名、目录名或卷标语法不正确。)
 at java.io.FileOutputStream.open0(Native Method)


  • java.io.FileNotFoundException出现这个异常是文件路径问题,你在调用UploadFile(HttpServletRequest request,String uploadDirectory) 这个方法时,uploadDirectory的值是什么?
    2018-03-15 16:15:22
  • 提问者 荒小北158 回复 好帮手慕珊 #2
    //先获取上传文件的路径位置 String uploadDirectory = this.getServletContext().getRealPath("/upload");
    2018-03-15 19:23:19
  • 提问者 荒小北158 回复 好帮手慕珊 #3
    和web注册登陆案例的一样 我在webContent下面建了一个upload文件夹
    2018-03-15 19:47:23
提问者 荒小北158 2018-03-15 15:11:52

http://img1.sycdn.imooc.com//climg/5aaa19d90001be7e19201080.jpg

http://img1.sycdn.imooc.com//climg/5aaa1c57000145b019201080.jpg

当我提交表单的时候  无法跳转到showFoodList.jsp     这里应该是上传文件有问题吧..但是我解决不了



  • 提问者 荒小北158 #1
    额。。。。好吧 之前的那个输入输出流有问题 但是修正之后新的异常时==三月 15, 2018 3:44:01 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [com.imooc.servlet.addFoodServlet] in context with path [/MyWork] threw exception java.io.FileNotFoundException: D:\Java EEproject\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyWork\upload\name=C:\Users\Administrator\Desktop\caipin\2.png, StoreLocation=C:\Users\ADMINI~1\AppData\Local\Temp\upload_56fcd0bb_162289da0be__8000_00000003.tmp, size=155255bytes, isFormField=false, FieldName=foodImage (文件名、目录名或卷标语法不正确。) at java.io.FileOutputStream.open0(Native Method)========
    2018-03-15 15:47:49
好帮手慕珊 2018-03-15 14:08:57

因为不知道你的uploadDirectory是什么内容,我是直接把获取图片路径的代码注释掉了,然后是可以获取到description的内容的 ,如下图所示:

http://img1.sycdn.imooc.com//climg/5aaa0d4d00013ecf02420153.jpg

你再运行一下试试,看控制台是否有报错信息,如果因为获取图片路径的代码有问题,也会有报错,并且会导致description不能输出。

如果有报错,请把控制台报错贴出来。

另外,注意以后贴代码不要在回复里面贴,比较乱,在回答里面贴。

祝学习愉快!


一叶知秋519 2018-03-14 11:13:30

看你的输出信息,获取表单项名称时,应该就没有获取到,存储map时,存储的是null。

你把  String name = fileItem.getName();//获取表单项的名称

改为  String name = fileItem.getFieldName();//获取表单项的名称

getName方法用来获得文件上传字段中的文件名。getFieldName方法用来返回表单标签的name属性的值。

如果还有问题,可以再次提问。祝学习愉快!

  • 提问者 荒小北158 #1
    //接收普通项的值 String name = fileItem.getFieldName();//获取表单项的名称 //获取表单项的值,且返回utf-8编码格式 String value = fileItem.getString("UTF-8"); //测试表单中的数据是否获取 System.out.println(name+" "+value); //将普通表单项的数据存储到map集合中 params.put(name,value); 我测试name --value 发现总是获取不到name为description那个描述
    2018-03-15 09:05:38
  • 好帮手慕珊 回复 提问者 荒小北158 #2
    是根本就没有description相关的输出吗?建议你把表单的jsp页面和改好后的UploadUtils重新贴一下代码,我们运行一下看看
    2018-03-15 09:49:25
  • 提问者 荒小北158 回复 好帮手慕珊 #3
    <form action="<%=basePath%>/FoodAddServlet" method="post" enctype="multipart/form-data"> <table border="1px" width="400px" cellspacing="0px" cellpadding="0px"> <tr> <td>菜品&nbsp;ID</td> <td><input type="text" name="id"></td> </tr> <tr> <td>菜&nbsp;&nbsp;名</td> <td><input type="text" name="foodName"></td> </tr> <tr> <td>口&nbsp;&nbsp;味</td> <td> <input type="radio" name="taste" value="香辣">香辣 <input type="radio" name="taste" value="微辣">微辣 <input type="radio" name="taste" value="麻辣">麻辣 <input type="radio" name="taste" value="不辣">不辣 </td> </tr> <tr> <td>菜品图片</td> <td><input type="file" name="foodImage"></td> </tr> <tr> <td>价&nbsp;&nbsp;格</td> <td><input type="text" name="price"></td> </tr> <tr> <td>菜品描述</td> <td> <textarea name="description"></textarea> </td> </tr> <tr style="text-align:center;width:20px"> <td colspan="2"> <input type="submit" value="添加"> <input type="reset" value="重置"> </td> </tr> </table> </form>
    2018-03-15 12:30:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师