Post的三種請求方式

1 multipart/form-data

多部件傳輸方式蚌成,也就是說選擇這種方式進(jìn)行上傳,可以上傳文件和參數(shù)

使用Postman工具進(jìn)行該方式提交數(shù)據(jù),如下圖所示

form-data.png

這里的file就對應(yīng)了你需要上傳的圖片蜓谋、或者其他文件;Text類型就是普通key-value參數(shù)和參數(shù)值炭分,下面使用Java進(jìn)行實現(xiàn)一下文件上傳

1.1 實現(xiàn)文件上傳

  • 加入依賴包
<dependencies>
        <!--  文件上傳 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.1</version>
        </dependency>
</dependencies>    
  • 編寫Java類
public void getFileFromHttpRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            // 1. 創(chuàng)建磁盤文件工廠對象
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            // 2. 創(chuàng)建文件上傳核心類
            ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
            // 2.1 設(shè)置上傳文件的編碼
            servletFileUpload.setHeaderEncoding("UTF-8");
            // 2.2 判斷表單是否是文件上傳表單
            if (servletFileUpload.isMultipartContent(request)) {           // 是多部文件上傳表單
                // 3. 解析request -> 獲取表單項的集合
                List<FileItem> list = servletFileUpload.parseRequest(request);
                if (null != list) {
                    // 4. 遍歷集合獲取表單項
                    for (FileItem fileItem : list) {
                        // 5. 判斷當(dāng)前表單項 是不是普通表單項
                        if (fileItem.isFormField()) {                      // 普通表單項
                            String fieldName = fileItem.getFieldName();
                            // 設(shè)置編碼
                            String fieldValue = null;//設(shè)置編碼
                            try {
                                fieldValue = fileItem.getString("utf-8");
                            } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                            }
                            System.out.println(fieldName +" = " +fieldValue);
                        } else {
                            //文件上傳項
                            //獲取文件名
                            String fileName = fileItem.getName();

                            // 拼接新的文件名桃焕,使用UUID保證唯一性
                            String newFileName = String.format("%s_%s", UUIDUtils.getUUID(), fileName);

                            // 獲取輸入流
                            InputStream inputStream = fileItem.getInputStream();

                            //創(chuàng)建輸出流
                            //1.獲取項目的運行目錄 J:\install\apache-tomcat-9.0.41\webapps\lagou_edu_home\
                            String realPath = this.getServletContext().getRealPath("/");

                            //2.截取到 webapps目錄路徑
                            String wabappsPath = realPath.substring(0, realPath.indexOf("lagou_edu_home"));

                            //3.拼接輸出路徑,將圖片保存到 upload
                            FileOutputStream out = new FileOutputStream(wabappsPath+"/upload/" + newFileName);

                            //使用IOUtils完成 文件的copy
                            IOUtils.copy(inputStream,out);

                            //關(guān)閉流
                            out.close();
                            inputStream.close();
                        }
                    }

                }
            }
        } catch (FileUploadException  e) {
            e.printStackTrace();
        }
    }

2 application/x-www-form-urlencoded

提交form表單,只能是key-value值

  • Java獲取form表單里面的參數(shù)值
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 獲取post請求中from表單的數(shù)據(jù)
        Map<String, String[]> parameterMap = request.getParameterMap();
        parameterMap.entrySet().forEach(System.out::print);
    }

3 raw

提交Json數(shù)據(jù)格式捧毛,在Servlet中使用工具類進(jìn)行解析獲取參數(shù)值

  • Java獲取Json數(shù)據(jù)格式的參數(shù)值
public String getPostJSON(HttpServletRequest request){

        try {
            //1.從request中 獲取緩沖輸入流對象
            BufferedReader reader = request.getReader();

            //2.創(chuàng)建StringBuffer 保存讀取出的數(shù)據(jù)
            StringBuffer sb = new StringBuffer();

            //3.循環(huán)讀取
            String line = null;
            while((line = reader.readLine()) != null){
                //將每次讀取的數(shù)據(jù) 追加到StringBuffer
                sb.append(line);
            }

            //4.返回結(jié)果
            return sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

總結(jié):讀取請求里面的流观堂,然后轉(zhuǎn)為Map結(jié)構(gòu)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末让网,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子师痕,更是在濱河造成了極大的恐慌溃睹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胰坟,死亡現(xiàn)場離奇詭異因篇,居然都是意外死亡,警方通過查閱死者的電腦和手機腕铸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門惜犀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狠裹,你說我怎么就攤上這事虽界。” “怎么了涛菠?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵莉御,是天一觀的道長。 經(jīng)常有香客問我俗冻,道長礁叔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任迄薄,我火速辦了婚禮琅关,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讥蔽。我一直安慰自己涣易,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布冶伞。 她就那樣靜靜地躺著新症,像睡著了一般。 火紅的嫁衣襯著肌膚如雪响禽。 梳的紋絲不亂的頭發(fā)上徒爹,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音芋类,去河邊找鬼隆嗅。 笑死,一個胖子當(dāng)著我的面吹牛侯繁,可吹牛的內(nèi)容都是我干的胖喳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巫击,長吁一口氣:“原來是場噩夢啊……” “哼禀晓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坝锰,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤粹懒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后顷级,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凫乖,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年弓颈,在試婚紗的時候發(fā)現(xiàn)自己被綠了帽芽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡翔冀,死狀恐怖导街,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纤子,我是刑警寧澤搬瑰,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站控硼,受9級特大地震影響泽论,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卡乾,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一翼悴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幔妨,春花似錦鹦赎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埂伦,卻和暖如春煞额,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沾谜。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工膊毁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人基跑。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓婚温,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媳否。 傳聞我的和親對象是個殘疾皇子栅螟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容