<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<%@page import="task.object.*" %>
<%@page import="task.task.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body bgcolor=pink>
<form method="post" action="Upload" ENCTYPE="multipart/form-data">
<table align=center width="80%" border="1"  cellspacing="2" cellpadding="6" height="240">
<caption>
<span ID=banner style="font-size:15pt;font-family:'宋体'" >
<strong>上传任务</strong></caption>
<tbody><tr bgcolor="E4EDF9">
<td width=20%><div align="center">任务ID</div></td>
<td>&nbsp;<input type="text" size="50" name="taskid"></td></tr>
<tr bgcolor="F1F3F5">
<td width=20%><div align="center">任务名称</div></td>
<td>&nbsp;<input type="text" size="50" name="taskname"></td></tr></tr>
<tr bgcolor="E4EDF9">
<td width=20%><div align="center">执行者</div></td>
<td>&nbsp;<input type="text" size="50" name="taskfinisher"></td>
</tr>
<tr bgcolor="F1F3F5">
<td width=20%><div align="center">开始时间</div></td>
<td>&nbsp;<input type="text" name="year" size="5">年
<select name="month">
<option value="13"></option>
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
&#26376; <select name="date">
<option value="32"></option>
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
日</td></tr><tr><td colspan="2"><hr></td></tr>
<tr bgcolor="E4EDF9"><td colspan=2><input type="file" name="file1" size="50"  >&nbsp;&nbsp;
<input type="submit" value="上传"></td></tr></tbody>
</table>
</form>
</body>
</html>后台的servlet取到的文件名为空,如果把<form method="post" action="Upload" ENCTYPE="multipart/form-data">放到<input type="file" name="file1" size="50"  >前就不会出现此问题,请问哪位能明白是为什么,怎么样处理一下?

解决方案 »

  1.   

    按照楼主说的,好像是把<form>放在表单元素<input type="file" ..../> 后边了吧?
    提交的时候,只有<form>标签中间的表单元素的值被服务端接收到。
      

  2.   


    ??
    页面没问题吧,你看下你后台是不是获得出错,DEBUG看下,直接可以用get方法获得得
      

  3.   

    可能是我没说明白,上面那段代码,<input type="file" name="file1" size="50"  > 在表单标签内。服务器接收到的文件名是空的?
      

  4.   

    可能是我没说明白,上面那段代码,<input type="file" name="file1" size="50"  > 在表单标签内。服务器接收到的文件名是空的?
      

  5.   

    file.getFileName(); 文件流直接可以获得名字
      

  6.   

    错误:
    java.lang.NullPointerException
    at cn.cheney.UploadServlet.doPost(UploadServlet.java:84)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:616)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:619)
      

  7.   

    http://blog.csdn.net/cjg520jie/archive/2009/04/13/4068578.aspx
    http://blog.csdn.net/cjg520jie/archive/2009/04/13/4068578.aspx参考下里面的代码
      

  8.   

    package task.object;import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.*;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;import java.util.*;
    import java.io.*;/**
     * Servlet implementation class Upload
     */
    public class Upload extends HttpServlet {
    private static final long serialVersionUID = 1L;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Upload() {
    super();
    // TODO Auto-generated constructor stub
    } /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    } /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out=response.getWriter();
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html; charset=GBK");
    //设置上传文件的名字
     String uploadPath ="D:\\JavaSource\\Task\\uploadDir\\"; // 上传文件的目录
     String  tempPath = "D:\\JavaSource\\Task"; // 临时文件目录
     HttpSession ses=request.getSession();
    try {
            FileItemFactory factory = new DiskFileItemFactory();
               // 设定缓存大小 
            ((DiskFileItemFactory) factory).setSizeThreshold(4096); 
         // 设定暂存Directory 
            ((DiskFileItemFactory) factory).setRepository(new File(tempPath));          ServletFileUpload upload = new ServletFileUpload(factory);
         // 设置最大文件尺寸,这里是4MB
            upload.setSizeMax(4194304);
            // 得到所有的文件:
          //解析用户请求的参数,取出文件上传信息
            List fileItems = upload.parseRequest(request);
            Iterator i = fileItems.iterator();
            // 依次处理每一个文件:
           if(i.hasNext()) {
                FileItem fileItem  = (FileItem)i.next();
                String fileName = fileItem.getName();   
                System.out.println(fileName);
                //获取上传文件名,接下来处理一下,取出 文件名.扩展名 即可
                fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
               
                File uploadDir = new File(uploadPath,fileName); //构造上传文件存放位置
                fileItem.write(uploadDir);
                
    // 文件路径存入数据库            
                String sql_filename=uploadPath+fileName;
                String taskid=(String)ses.getAttribute("add_taskid");
                System.out.println("任务id:"+taskid);
                FileUpload_down.add_file(sql_filename, taskid);
                ses.removeAttribute("add_taskid");
                // 获得文件名,这个文件名包括路径:
                         
            }
            response.sendRedirect("welcom.jsp");
               }
        catch(Exception e) {
            // 可以跳转出错页面
         e.printStackTrace();
         String error="上传失败!";
    ses.setAttribute("error", error);
    response.sendRedirect("error.jsp");
             } }}
    这个是后台处理程序,麻烦各位看看,是我哪里写错了