Spring Boot接收文件上传

遇到的问题:

今日份的工作任务之一,是需要将师兄写好的代码,整合到项目中来,在修改的过程中遇到一些问题,一直提示

request.getInputStream().read()

这句语句执行后,buffer并没有获取到相应的值。

开始进行尝试解决这个问题,首先核对了下师兄那里可以跑通的代码:

请求头如下所示:

Spring Boot接收文件上传_第1张图片

参数,表单数据如下所示:

划重点,Content-type为application/x-www-form-urlencoded,这意味着:

1.转换为Spring Boot的时候,需要采用@ResponseBody或@ResponseParam来接收到这些表单数据

2.需要进行url转码

解决方式:

首先将如下内容:

    @POST
    @Path("test")
    @Produces({MediaType.APPLICATION_JSON})
    public String getTest(@Context HttpServletRequest request){
    
    }

修改为:

    @RequestMapping(value = "/test", method = RequestMethod.POST, produces="application/json")
    @Timed
    public String getTest(@Context HttpServletRequest request,@RequestBody String query) throws IOException{
     
    }

而后,将原本读入数据的部分:

       try {
            int contentLength = request.getContentLength();
            byte buffer[] = new byte[contentLength];
            for (int i = 0; i < contentLength;) {
                int readlen = request.getInputStream().read(buffer, i,
                        contentLength - i);
                if (readlen == -1) {
                    break;
                }
                i += readlen;
            }
            String query = new String(buffer, "UTF-8");
            ...
        }

作如下修改:

        try {
        	query = URLDecoder.decode(query, "UTF-8");  
                ....
        }

这样问题就可以得到解决了。

涉及的知识点:

 1.URL解码与编码

//编码     
String strUTF8 = URLEncoder.encode(strTest, "UTF-8");  

//解码
String strUTF8 = URLDecoder.decode(strTest, "UTF-8");  


//也可以GBK等编码格式指定
      

 

 

 

你可能感兴趣的:(Web后端)