Spark框架上傳文件時對其他參數的處理以及springboot框架的處理操作

不是Apache Spark

1.spark上傳文件
post請求,Content-Type爲multipart/form-data,文件對應的參數名爲file_data

post("/OaUpload", (req, res) -> {
            HashMap<String, Object> result = new HashMap<>();
            req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp"));
            try (InputStream is = req.raw().getPart("file_data").getInputStream()) {
                BufferedInputStream in = new BufferedInputStream(is);
                //獲取到文件流後的操作
               ...
            }
            result.put("returnCode", 0);
            return JSONObject.toJSON(result);
        });

那麼如果需要傳其他參數怎麼辦,比如傳一個uid以便後臺處理。
multipart/form-data請求方式是以二進制數據的形式傳輸,所以通過流的方式讀取uid然後轉爲string就能獲取該字段。

import org.apache.commons.io.IOUtils;
...
req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp"));
//multipart/form-data請求獲取其他參數需要二進制流轉string
Part uidPart = req.raw().getPart("uid");
String uid = IOUtils.toString(uidPart.getInputStream());
...

2.springboot上傳時其他參數的解析
在springboot中,我們只要這樣寫就能獲取到其他參數name

@PostMapping("upload")
public Map<String, Object> uploadFile(MultipartFile upFile, String name) {
...
}

解析源碼,看下spring的處理過程:

2.1 springboot版本這邊是1.5.2
在這裏插入圖片描述
2.2 請求過程
請求正式進入Servlet中後,會走到DispatcherServlet,然後走其中的doService方法,然後走到doDispatch方法
在這裏插入圖片描述
然後走checkMultipart對請求參數upFile的處理
doDispatch方法往下有一行代碼:

mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

這邊是將非Multipart參數的處理
在這裏插入圖片描述
一直往裏走到getMethodArgumentValues,這邊就已經獲取到其他參數name的值
doDispatch的handle方法執行完後,可以發現processedRequest中已經解析完MultipartFile和name兩個參數
在這裏插入圖片描述
在這裏插入圖片描述
所以在post方法中可以直接獲取到name參數

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