Spring mvc 使用ajax将文件从jsp发送到spring控制器

Spring mvc 使用ajax将文件从jsp发送到spring控制器,spring-mvc,file-io,facebook-javascript-sdk,fileinputstream,Spring Mvc,File Io,Facebook Javascript Sdk,Fileinputstream,我需要从jsp页面发送一个图像文件,并使用JavaScript ajax调用在控制器页面读取该文件。 jsp页面上的警报似乎表明文件对象已正确读取,但在控制器和ajax给出者错误响应(而不是成功响应)处未收到任何内容 下面是我正在使用的代码片段 jsp文件 <table> <tr> <td>Profile Picture</td> <td><input type="file" id="profilePic">&l

我需要从jsp页面发送一个图像文件,并使用JavaScript ajax调用在控制器页面读取该文件。 jsp页面上的警报似乎表明文件对象已正确读取,但在控制器和ajax给出者错误响应(而不是成功响应)处未收到任何内容

下面是我正在使用的代码片段

jsp文件

<table>
<tr>
   <td>Profile Picture</td>
   <td><input type="file" id="profilePic"></td>
</tr>
<tr>
    <td colspan="2"><button id="updatePic" onclick="pic();">submit pic</button></td>
</tr>
</table> 
控制器

   @RequestMapping(value="/updateprofile",method=RequestMethod.POST)
        public @ResponseBody String updateProfile(@RequestParam("profilePic") InputStream profilePic){

     try {
                int i=0;
                ArrayList<Byte> listOfBytes=new ArrayList<Byte>();
                InputStream input=profilePic.getInputStream();
                do{
                    i=input.read();
                    if(i!=-1)
                    {
                        listOfBytes.add((byte) i);
                    }
                }while(i!=-1);
                System.out.println(listOfBytes.size());
                byte []picBytes=new byte[listOfBytes.size()];
                for (int j = 0; j < listOfBytes.size(); j++) {
                    picBytes[j]=listOfBytes.get(j);
                }

        } catch (IOException e) {

                e.printStackTrace();
         }

    }
使用ajax在SpringMVC上进行的任何示例FileIO操作都将非常有用。任何帮助都将不胜感激


谢谢

检查答案。它详细说明了如何做到这一点

正如我在问题陈述中提到的,我不想要包含表单提交的解决方案,例如。我希望有一个包含ajax组件的解决方案,这样页面就不必重新加载。
   @RequestMapping(value="/updateprofile",method=RequestMethod.POST)
        public @ResponseBody String updateProfile(@RequestParam("profilePic") InputStream profilePic){

     try {
                int i=0;
                ArrayList<Byte> listOfBytes=new ArrayList<Byte>();
                InputStream input=profilePic.getInputStream();
                do{
                    i=input.read();
                    if(i!=-1)
                    {
                        listOfBytes.add((byte) i);
                    }
                }while(i!=-1);
                System.out.println(listOfBytes.size());
                byte []picBytes=new byte[listOfBytes.size()];
                for (int j = 0; j < listOfBytes.size(); j++) {
                    picBytes[j]=listOfBytes.get(j);
                }

        } catch (IOException e) {

                e.printStackTrace();
         }

    }