Spring Boot接收文件上傳

遇到的問題:

今日份的工作任務之一,是需要將師兄寫好的代碼,整合到項目中來,在修改的過程中遇到一些問題,一直提示

request.getInputStream().read()

這句語句執行後,buffer並沒有獲取到相應的值。

開始進行嘗試解決這個問題,首先覈對了下師兄那裏可以跑通的代碼:

請求頭如下所示:

參數,表單數據如下所示:

劃重點,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等編碼格式指定
      

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章