无法获取文件名?始终为空

时间:2011-03-13 19:33:49

标签: java html

HTML

                        <form enctype="multipart/form-data" method="post" action="addCompany">
                            <fieldset>
                                <legend>Add Company</legend>
                                <br/>
                                <label>Company Name:</label>
                                <input name="name" size="30" type="text"/>
                                <br/>
                                <label>Company Logo:</label>
                                <input name="file" size="30" type="file"/>
                                <br/>
                                <span id="updateError" class="errorMessage"></span>
                                <button type="submit" class="jUiButton">Submit</button>
                            </fieldset>
                        </form>     
                        <script>$(".jUiButton").button()</script>

Java Servlet

// Check that we have a file upload request
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if(isMultipart && request.getContentType() != null)
        {
            // Create a factory for disk-based file items
            FileItemFactory factory = new DiskFileItemFactory();

            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);

            // Parse the request
            List /* FileItem */ items = null;
            try
            {
                items = upload.parseRequest(request);
            }
            catch(FileUploadException e) {}

            // Process the uploaded items
            Iterator iter = items.iterator();

            FileItem cvFile = null;
            while(iter.hasNext())
            {
                FileItem item = (FileItem)iter.next();

                if(item.isFormField())
                {
                    if(item.getFieldName().equals("name"))
                        name = item.getString();
                }
                else
                {
                    cvFile = item;
                }

                if(name != null && cvFile != null)
                {
                    directoryName = request.getRealPath("/") + "/Uploads/Companies/" + name + "/";
                    File theDir = new File(directoryName);
                    if (!theDir.exists())
                        theDir.mkdir();

                    File uploadedFile = new File(directoryName + cvFile.getName());
                    try
                    {
                        cvFile.write(uploadedFile);
                    }
                    catch(Exception e) {}
                }
            }

我在这里得到一个null异常(在最后一个if语句中):

File uploadedFile = new File(directoryName + cvFile.getName());

2 个答案:

答案 0 :(得分:1)

你的代码有问题(我甚至不是Java人)。

FileItem cvFile = null;

你在这里将cvFile设置为null。

while(iter.hasNext())
{
   FileItem item = (FileItem)iter.next();

   if(item.isFormField())
   {
     if(item.getFieldName().equals("name"))
        name = item.getString();
   }
   else
   {
      cvFile = item;
   }

如果if的第一个分支取(item.isFormField()),cvFile保持为空(其值永远不会从初始化的位置改变)。

File uploadedFile = new File(directoryName + cvFile.getName());

您在此处使用cvFile.getName(),但cvFile可能仍为空。

答案 1 :(得分:0)

你在哪里通过setName或其他方式将cvFile.name设置为某个东西?我想你的名字是空的。我没有看到它设置在项目上。我认为看到cvFile被分配给一个对象,但你尝试通过getName访问的名称对象是null。