欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC處理multipart請求的示例代碼

 更新時(shí)間:2018年01月04日 11:36:32   作者:JMCui  
本篇文章主要介紹了SpringMVC處理multipart請求的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一、簡述

multipart格式的數(shù)據(jù)會將一個(gè)表單拆分為多個(gè)部分(part),每個(gè)部分對應(yīng)一個(gè)輸入域。在一般的表單輸入域中,它所對應(yīng)的部分中會放置文本型數(shù)據(jù),但是如果上傳文件的話,它所對應(yīng)的部分可以是二進(jìn)制。類似這樣:

二、 配置 multipart 解析器

盡管multipart請求看起來很復(fù)雜,但在Spring MVC中處理它們卻很容易。在編寫控制器方法處理文件上傳之前,我們必須要配置一個(gè)multipart解析器,通過它來告訴DispatcherServlet該如何讀取multipart請求。

Spring 內(nèi)置了兩個(gè)MultipartResolver的實(shí)現(xiàn):

  1. CommonsMultipartResolver :使用Jakarta Commons FileUpload解析multipart請求;
  2. StandardServletMultipartResolver :依賴于Servlet 3.0對multipart請求的支持(始于Spring 3.1)。

StandardServletMultipartResolver的配置:

1、聲明Bean:

在applicationContext.xml 配置

復(fù)制代碼 代碼如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver>

在配置類中配置

    @Bean(name = "multipartResolver")
    public StandardServletMultipartResolver getStandardServletMultipartResolver(){
        return new StandardServletMultipartResolver();
    }

tips:multipart解析器的命名一定要是 multipartResolver ,否則會報(bào)錯(cuò)。

2、配置上傳參數(shù):

* web.xml 配置

 <servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  <multipart-config>
    <!--上傳到/tmp/upload 目錄-->
   <location>/tmp/upload</location>
    <!--文件大小為2M-->
   <max-file-size>2097152</max-file-size>
    <!--整個(gè)請求不超過4M-->
   <max-request-size>4194304</max-request-size>
    <!--所有文件都要寫入磁盤-->
   <file-size-threshold>0</file-size-threshold>
  </multipart-config>
 </servlet>
 <servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>

* 配置類中配置

繼承 AbstractAnnotationConfigDispatcherServletInitializer 的配置類

  @Override
  protected void customizeRegistration(ServletRegistration.Dynamic registration) {
    //上傳到/tmp/upload 目錄,文件大小為2M,整個(gè)請求不超過4M,而且所有文件都要寫入磁盤
    registration.setMultipartConfig(new MultipartConfigElement("E:\\upload_ftp",2097152,4194304,0));
  }

CommonsMultipartResolver的配置:

1、聲明Bean 和 配置上傳參數(shù)

  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--設(shè)置上傳目錄/tmp/upload;最大的文件容量設(shè)置為2M;最大的內(nèi)存大小設(shè)置為0,表示所有文件都會寫入磁盤中;無法設(shè)定multipart請求整體的最大容量-->
    <property name="uploadTempDir" value="/tmp/upload"/>
    <property name="maxUploadSize" value="2097152"/>
    <property name="maxInMemorySize" value="0"/>
  </bean>

區(qū)別:

1、 CommonsMultipartResolver 相比較 StandardServletMultipartResolver 來說 就是無法設(shè)定multipart請求整體的最大容量。

2、 CommonsMultipartResolver 不會強(qiáng)制要求設(shè)置臨時(shí)文件路徑。默認(rèn)情況下,這個(gè)路徑就是 Servlet 容器的臨時(shí)目錄。 StandardServletMultipartResolver 必須設(shè)置臨時(shí)文件路徑才能正常執(zhí)行。(以上所述上傳目錄均為臨時(shí)文件路徑)

三、SpringMVC 處理請求

1、前端Form 表單

   <form action="/picture" method="post" enctype="multipart/form-data">
     <input type="file" name="picture">
     <input type="submit">
   </form>

tips:需要設(shè)置   enctype="multipart/form-data",以告訴SpringMVC 這是一個(gè)Multipart 請求。

2、后端MVC接受請求

  @RequestMapping(value = "/picture",method = RequestMethod.POST)
  public String getHome(@RequestPart("picture") MultipartFile picture) throws IOException {
    String name = picture.getName();
    byte[] bytes = picture.getBytes();
    picture.transferTo(new File("/"+picture.getOriginalFilename())); 
    //這里保存到文件系統(tǒng)的時(shí)候要用相對路徑,比如這里配置的是 /。以配置的上傳目錄為基準(zhǔn)。即文件路徑 E:/upload_ftp/ 是保存的目錄
    return "home";
  }

tips:1、@RequestPart("picture") : 當(dāng)注冊表單提交的時(shí)候,p icture 屬性將會給定一個(gè) byte 數(shù)組,這個(gè)數(shù)組中包含了請求中對應(yīng) part 的數(shù)據(jù)(通過 @RequestPart 指定)。如果用戶提交表單的時(shí)候沒有選擇文件,那么這個(gè)數(shù)組會是空(而不是 null )。所以說我們甚至可以用byte[]數(shù)組接收Multipart請求而不用  MultipartFile。

2、MultipartFile :用MultipartFile方法接收為我們提供了很多的方法以便進(jìn)行接下來的工作...

 

3、 以 Part的形式接受上傳的文件

就主體來言, Part 接口與 MultipartFile 并沒有太大的差別。  在很多情況下, Part 方法的名稱與 MultipartFile 方法的名稱是完全相同的。有一些比較類似,但是稍有差異,比如 getSubmittedFileName() 對應(yīng)于 getOriginalFilename() 。類似地, write() 對應(yīng)于 transferTo() ,借助該方法我們能夠?qū)⑸蟼鞯奈募懭胛募到y(tǒng)中。

值得一提的是,如果在編寫控制器方法的時(shí)候,通過Part參數(shù)的形式接受文件上傳,那么就沒有必要設(shè)置MultipartResolver 了。只有使用MultipartFile的時(shí)候,我們才需要MultipartResolver。

  @RequestMapping(value = "/picture",method = RequestMethod.POST)
  public String getHome(@RequestPart("picture") Part picture) throws IOException {
    picture.write("/"+picture.getSubmittedFileName());
    return "home";
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java數(shù)組添加元素的兩種方法

    Java數(shù)組添加元素的兩種方法

    這篇文章主要介紹了Java數(shù)組添加元素的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java的函數(shù)方法詳解(含漢諾塔問題)

    Java的函數(shù)方法詳解(含漢諾塔問題)

    漢諾塔問題是一個(gè)經(jīng)典的遞歸問題,下面這篇文章主要給大家介紹了關(guān)于Java函數(shù)方法(含漢諾塔問題)的相關(guān)資料,文中通過圖文以及代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • SpringBoot排除自動加載數(shù)據(jù)源方式

    SpringBoot排除自動加載數(shù)據(jù)源方式

    這篇文章主要介紹了SpringBoot排除自動加載數(shù)據(jù)源方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 使用feign配置網(wǎng)絡(luò)ip代理

    使用feign配置網(wǎng)絡(luò)ip代理

    這篇文章主要介紹了使用feign配置網(wǎng)絡(luò)ip代理,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java HtmlParse提取標(biāo)簽中的值操作

    Java HtmlParse提取標(biāo)簽中的值操作

    這篇文章主要介紹了Java HtmlParse提取標(biāo)簽中的值操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java集合之同步容器詳解

    Java集合之同步容器詳解

    這篇文章主要為大家詳細(xì)介紹了Java集合之同步容器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • idea取消git托管方式(刪除git文件)

    idea取消git托管方式(刪除git文件)

    遇到Git文件傳輸錯(cuò)誤或打不開問題時(shí),需進(jìn)行Git清理和重新配置,首先刪除項(xiàng)目中的.git文件和.gitignore文件,若找不到,檢查是否為隱藏文件,接著在IDE的設(shè)置中,刪除所有版本控制模塊,最后,若想重新使用Git,可在設(shè)置里重新啟用并配置,連接至GitHub倉庫即可恢復(fù)正常
    2024-10-10
  • SpringBoot啟動之SpringApplication初始化詳解

    SpringBoot啟動之SpringApplication初始化詳解

    這篇文章主要介紹了SpringBoot啟動之SpringApplication初始化詳解,首先初始化資源加載器,默認(rèn)為null;斷言判斷主要資源類不能為null,否則報(bào)錯(cuò),需要的朋友可以參考下
    2024-01-01
  • 詳細(xì)了解MVC+proxy

    詳細(xì)了解MVC+proxy

    Java有兩種代理方式,一種是靜態(tài)代理,另一種是動態(tài)代理。對于靜態(tài)代理,其實(shí)就是通過依賴注入,對對象進(jìn)行封裝,不讓外部知道實(shí)現(xiàn)的細(xì)節(jié)。很多 API 就是通過這種形式來封裝的
    2021-07-07
  • mybatis-plus  mapper中foreach循環(huán)操作代碼詳解(新增或修改)

    mybatis-plus mapper中foreach循環(huán)操作代碼詳解(新增或修改)

    這篇文章主要介紹了mybatis-plus mapper中foreach循環(huán)操作代碼詳解(新增或修改),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評論