摘要:你可以通過在應用程序上下文中添加一個解析器來啟用的處理。當的檢測到一個請求時,它會激活你聲明好的解析器,然后把這個解析器轉交給請求。解析器會把當前的扭曲為一個支持文件上傳的。首先,創建一個帶有的表單,這樣用戶就可以通過這個表單上傳文件了。
??最近家里的網出現了莫名其妙的問題,連不上碼云了,所以把示例遷到了 github 上。本示例見這個項目的 master 分支的 ZestMultipartController.java。
??Spring 的內置 multipart 支持用于處理 Web 應用程序中的文件上傳。你可以通過使用插件化的MultipartResolver對象來啟用 multipart 支持,它定義在包org.springframework.web.multipart中。Spring 提供了一個MultipartResolver的實現,使用了 Apache 的 Commons FileUpload 和一些其他的東西,用于對 Servlet 3.0 的 multipart 請求的解析。
??默認地,Spring 不進行 multipart 處理,因為很多開發者想要自己處理。你可以通過在 Web 應用程序上下文中添加一個 multipart 解析器來啟用 Spring 的 multipart 處理。每一個請求都要被檢查,看看是否包含一個 multipart。如果沒有發現 multipart,請求就正常繼續啦;如果有的話,你在上下文中聲明的MultipartResolver就會開始工作啦。之后嘞,你就可以像訪問其他請求屬性那樣訪問 multipart 屬性啦。
和 Commons FileUpload 一起使用MultipartResolver??下面的例子展示了怎樣使用CommonsMultipartResolver,快來看看吧:
??當然啦,你也需要在類路徑下放上合適的 Jar 文件來保證 multipart 解析器工作。對于上面的例子嘞,你需要使用 commons-fileupload.jar。
??當 Spring 的DispatcherServlet檢測到一個 multi-part 請求時,它會激活你聲明好的解析器,然后把這個解析器轉交給請求。解析器會把當前的HttpServletRequest扭曲(wrap?)為 一個支持 multipart 文件上傳的MultipartHttpServletRequest。使用這個MultipartHttpServletRequest,你就可以獲取這個請求中的 multipart 的信息了, 同時也可以在你的控制器中訪問這些 multipart 文件。
??在MultipartResolver完成自己的工作之后,你就可以像處理其他請求那樣處理當前請求了。首先,創建一個帶有的表單,這樣用戶就可以通過這個表單上傳文件了。為表單添加編碼屬性(enctype="multipart/form-data")來讓瀏覽器直到把表單編碼為 multipart 請求:
Upload a file please Please upload a file
??下一步是創建一個控制器來處理文件上傳。這個控制器和之前那種正常的控制器很像,不過我們在方法參數上使用MultipartHttpServletRequest或MultipartFile:
@Controller public class FileUploadController { @PostMapping("/form") public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // store the bytes somewhere return "redirect:uploadSuccess"; } return "redirect:uploadFailure"; } }
??注意@RequestParam方法參數是怎樣映射到表單的 input 元素中的。在這個例子中,并沒有使用byte[]做任何事,但是在實踐中,你可以把它保存到數據庫中,也可以保存到文件系統上等,隨你咯。
上傳文件之后不進行頁面跳轉??有時,想在上傳完頁面之后,頁面還保持在這里,不去跳轉。這時,可以借助。把上面的表單改成下面那樣就行啦:
······
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65211.html
摘要:把表單是的是基于流的,只能獲取一次,重復獲取將為空當上傳文件的控件與的字段混合時直接用一般是不行的下面的代碼進行同時表單參數獲取和文件上傳這里取得字段名稱如果已經存在此字段信息多選列表或多個同名的隱藏域等第一次取到這個名的字段這里而要對文 把Form表單是的enctype=multipart/form-data是基于流的,只能獲取一次,重復獲取將為空,當上傳文件的input控件與hid...
摘要:上篇文章介紹了通用文件服務組件實現版本,本文介紹基于與的方式實現。根據官網信息可知,它是一個高性能,可為我們的應用提供文件上傳服務的組件。程序可通過該對象獲取服務器的響應內容。 上篇文章介紹了通用文件服務組件(Netty實現版本),本文介紹基于HTTP與Apache FileUpload的方式實現。代碼地址:https://github.com/landy8530/... 1. 實現...
摘要:文件上傳解析請求正文的每部分的內容。獲取上傳文件的大小獲取上傳文件對應的輸入流把上傳的文件保存到指定文件中。如果上傳的文件超過,用磁盤作為緩存。如果自己用流實現的文件上傳,要在流關閉后,清理臨時文件。 一、文件的上傳和下載1、文件上傳的原理分析1.1文件上傳的必要前提:a、提供form表單,method必須是postb、form表單的enctype必須是multipart/form-d...
摘要:導入導出上傳前提準備個包準備上傳頁面同步上傳文件上傳上傳用戶上傳文件上傳文件提交異步上傳通過上傳組件上傳處理類這里用一句話描述這個類的作用孤傲蒼狼下午得到上傳文件的保存目錄,將上傳的文件存放于目錄下,不允許外界直接訪問,保 Java 導入 showImg(https://segmentfault.com/img/bVbkgn4?w=424&h=219); Java 導出 showImg...
摘要:但是集合框架專門有一個工具包對它們進行了擴展。是為了方便對的操作的工具包。如下實例你好你好是用于處理文件上傳的工具包。 commons-lang commons-lang為java核心類提供額外的方法。比如為Date類型提供addDays(),addHours操作,為String類提供isBlank(),isEmpty()操作。但是java集合框架專門有一個工具包commons-co...
閱讀 3035·2023-04-26 03:01
閱讀 3538·2023-04-25 19:54
閱讀 1592·2021-11-24 09:39
閱讀 1374·2021-11-19 09:40
閱讀 4250·2021-10-14 09:43
閱讀 2062·2019-08-30 15:56
閱讀 1490·2019-08-30 13:52
閱讀 1660·2019-08-29 13:05