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