qq_28379809
eknown
2017-11-23 11:54

maven项目 文件上传到服务器端解析为空

5
  • java
  • 前端
  • 表单

使用SSM框架开发一个maven项目,在实现一个文件上传的功能时,发现前端传到后端Controller类进行解析的时候,request里面读出来的文件流为空——也就是这个文件没正确传到后端。
百思不得其解,求了解的朋友能够帮忙看一下。
下面是我的前端上传代码和后端解析代码。

        <!-- 文件上传测试 -->
        <div class="panel-body">                   
                    <form method="POST" class="form-horizontal" action="exam/uploadQuestions.html" enctype="multipart/form-data">
                                                                     选择一个测试文件:<input type="file" name="uploadFile">
                         <input type="submit"  name="uploadSubmit" value="上传">
                    </form>                 
        </div>

Controller类方法。

 /**
     * 上传考试题目,返回包含了考试题目的main界面
     * @param request
     * @param response
     * @return
     * @throws IOException 
     */
    @RequestMapping(value="/uploadQuestions")
    public ModelAndView uploadQuestions(HttpServletRequest request, HttpServletResponse response) throws IOException {
        ModelAndView view = new ModelAndView("root/message");
        System.out.println("开始上传文件至服务器");
        DiskFileUpload diskFileUpload = new DiskFileUpload();//这个已经被废弃了,之后改成菜鸟教程的示例中的做法‘
        try {
            List<FileItem> list = diskFileUpload.parseRequest(request);//解析表单中每一个字段的数据,
            //包装成独立的FileItem对象并且以List方式返回
            System.out.println("准备遍历所有的FileItem...下面是表单field的name");
            for(FileItem i:list) {
                System.out.println(i.getFieldName());
            }

            //下面处理所有的FileItem
            for(FileItem i:list) {
                if(i.isFormField()) {
                    System.out.println("这是普通表单字段:"+i.getFieldName()+";"+i.getName()); 
                }else {
                    System.out.println("这是文件表单字段:"+i.getFieldName()+";"+i.getName()+"; 准备进行保存");
                    //File remoteFile = new File(new String(i.getName().getBytes(),"UTF-8"));//获得要上传的文件的引用
                    File remoteFile = new File(i.getName());//不使用转换编码格式的话就可以传递文件名为中文的文件了
                    System.out.println("客户端文件位置:"+remoteFile.getAbsolutePath());
                    System.out.println("path:"+remoteFile.getPath()+"; name:"+remoteFile.getName());


                    //下面指定要把上面的remoteFile保存为?
                    File saveFile = new File(new String(remoteFile.getName()));
                    saveFile.createNewFile();

                    //下面把remoteFile的内容输出到saveFile
                    InputStream ins = i.getInputStream();//获得这个fileItem的输入流
                    OutputStream ous = new FileOutputStream(saveFile);//获得saveFile的输出流

                    byte[] buffer = new byte[1024];
                    int len=0;
                    while( (len=ins.read(buffer)) > -1) {
                        ous.write(buffer, 0, len);
                        System.out.println("文件已经保存到:"+saveFile.getAbsolutePath());
                    }
                    ous.close();
                    ins.close();



                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return view;


    }
  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答