eknown 2017-11-23 11:54 采纳率: 0%
浏览 1616
已结题

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

使用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条回答 默认 最新

  • COCO_AS 2017-11-23 12:32
    关注

    需要注册 multipartResolver

    <!--文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="100000"></property>
    </bean>
    

    有了这个可以直接收到文件

        //处理表单输入
    @RequestMapping(method=RequestMethod.POST)
    //@Valid是对user参数的验证
    public String addForm(@Valid User user,BindingResult br,@RequestParam(value="image",required=false)MultipartFile image,Model model){
        if(br.hasErrors()){
            model.addAttribute("br",br);
            return "/user/edit";
        }
        LOG.info("Image:"+image.getName()+"  Image Size:"+image.getSize());
     //        saveImage();
        userService.saveUser(user);
        return "redirect:/home/"+user.getUserName();
    }
    

    参考
    http://www.cnblogs.com/wmmang-blog/p/3705268.html

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?