最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用SpringBoot框架來(lái)接收multipart/form-data文件方式

 更新時(shí)間:2023年02月27日 09:15:41   作者:林老師帶你學(xué)編程  
這篇文章主要介紹了用SpringBoot框架來(lái)接收multipart/form-data文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot框架接收multipart/form-data文件

今天遇到一個(gè)坑,這里給大家介紹一下。

現(xiàn)在很多文件上傳類(lèi)型都是multipart/form-data類(lèi)型的,HTTP請(qǐng)求如下所示:

可是問(wèn)題就在于如果用傳統(tǒng)的Struts2或者servlet等都可以很容易的實(shí)現(xiàn)文件接收的功能,例如下面的代碼就可以實(shí)現(xiàn):

boolean isMultipart = ServletFileUpload.isMultipartContent(request);//判斷是否是表單文件類(lèi)型  
DiskFileItemFactory factory = new DiskFileItemFactory();  
ServletFileUpload sfu = new ServletFileUpload(factory);  
List items = sfu.parseRequest(request);//從request得到所有上傳域的列表  
for(Iterator iter = items.iterator();iter.hasNext();){  
    FileItem fileitem =(FileItem) iter.next();  
    if(!fileitem.isFormField()&&fileitem!=null){//判讀不是普通表單域即是file  
        System.out.println("name:"+fileitem.getName());  
    }  
} 

可是今天我把這一段代碼放在SpringBoot上面的時(shí)候就怎么也接收不到文件信息了,一直以為是前端什么數(shù)據(jù)傳輸錯(cuò)了。后來(lái)才知道原來(lái)SpringBoot有它自己的接收請(qǐng)求的代碼。下面就給大家詳細(xì)介紹一下它是如何實(shí)現(xiàn)這個(gè)功能的。

首選做一個(gè)簡(jiǎn)單的案例,也就是單個(gè)文件上傳的案例。(這個(gè)案例是基于SpringBoot上面的,所以大家首先得搭建好SpringBoot這個(gè)框架)

前臺(tái)HTML代碼:

<html>  
<body>  
  <form action="/upload" method="POST" enctype="multipart/form-data">  
    <input type="file" name="file"/>  
    <input type="submit" value="Upload"/>   
  </form>  
</body>  
</html>  

后臺(tái)接收代碼:

/**   
     * 文件上傳具體實(shí)現(xiàn)方法;   
     *    
     * @param file   
     * @return   
     */    
    @RequestMapping("/upload")    
    @ResponseBody    
    public String handleFileUpload(@RequestParam("file") MultipartFile file) {    
        if (!file.isEmpty()) {    
            try {    
                /*   
                 * 這段代碼執(zhí)行完畢之后,圖片上傳到了工程的跟路徑; 大家自己擴(kuò)散下思維,如果我們想把圖片上傳到   
                 * d:/files大家是否能實(shí)現(xiàn)呢? 等等;   
                 * 這里只是簡(jiǎn)單一個(gè)例子,請(qǐng)自行參考,融入到實(shí)際中可能需要大家自己做一些思考,比如: 1、文件路徑; 2、文件名;   
                 * 3、文件格式; 4、文件大小的限制;   
                 */    
                BufferedOutputStream out = new BufferedOutputStream(    
                        new FileOutputStream(new File(    
                                file.getOriginalFilename())));    
                System.out.println(file.getName());  
                out.write(file.getBytes());    
                out.flush();    
                out.close();    
            } catch (FileNotFoundException e) {    
                e.printStackTrace();    
                return "上傳失敗," + e.getMessage();    
            } catch (IOException e) {    
                e.printStackTrace();    
                return "上傳失敗," + e.getMessage();    
            }    
    
            return "上傳成功";    
    
        } else {    
            return "上傳失敗,因?yàn)槲募强盏?";    
        }    
    }    

這樣就可以實(shí)現(xiàn)對(duì)multipart/form-data類(lèi)型文件的接收了。那如果是多個(gè)文件外加多個(gè)字段呢,下面接著看下一個(gè)多個(gè)文件上傳的案例。

前臺(tái)HTML界面:

<!DOCTYPE html>    
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"    
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">    
    <head>    
        <title>Hello World!</title>    
    </head>    
    <body>    
       <form method="POST" enctype="multipart/form-data" action="/batch/upload">     
           <p>文件1:<input type="text" name="id" /></p>    
           <p>文件2:<input type="text" name="name" /></p>    
           <p>文件3:<input type="file" name="file" /></p>    
           <p><input type="submit" value="上傳" /></p>    
       </form>    
    </body>    
</html>     

后臺(tái)接收代碼:

@RequestMapping(value = "/batch/upload", method = RequestMethod.POST)    
      @ResponseBody    
      public String handleFileUpload(HttpServletRequest request) {    
        MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);  
          List<MultipartFile> files = ((MultipartHttpServletRequest) request)    
                  .getFiles("file");   
          String name=params.getParameter("name");  
          System.out.println("name:"+name);  
          String id=params.getParameter("id");  
          System.out.println("id:"+id);  
          MultipartFile file = null;    
          BufferedOutputStream stream = null;    
          for (int i = 0; i < files.size(); ++i) {    
              file = files.get(i);    
              if (!file.isEmpty()) {    
                  try {    
                      byte[] bytes = file.getBytes();    
                      stream = new BufferedOutputStream(new FileOutputStream(    
                              new File(file.getOriginalFilename())));    
                      stream.write(bytes);    
                      stream.close();    
                  } catch (Exception e) {    
                      stream = null;    
                      return "You failed to upload " + i + " => "    
                              + e.getMessage();  
                  }    
              } else {    
                  return "You failed to upload " + i    
                          + " because the file was empty.";    
              }  
          }    
          return "upload successful";  
      }    

這樣就可以實(shí)現(xiàn)對(duì)多個(gè)文件的接收了功能了。

SpringBoot還可以對(duì)接收文件的格式還有個(gè)數(shù)等等進(jìn)行限制,我這里就不多說(shuō)了,大家有興趣的可以自己去了解了解。

千萬(wàn)要記住SpringBoot對(duì)multipart/form-data類(lèi)型的文件接收和其它是不一樣的,大家以后遇到的時(shí)候要千萬(wàn)小心,不要像我一樣一往無(wú)前的踩進(jìn)去還傻傻的以為是前端的錯(cuò)誤。

SpringBoot接收文件

package cn.juhe.controller;
 
import net.sf.json.JSONObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
 
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
 
@RestController
public class UploadTest {
    /**
     * 接受未知參數(shù)名的多個(gè)文件或者一個(gè)文件
     *
     * @param request 請(qǐng)求
     * @return 返回
     */
    @PostMapping("/upload")
    public JSONObject handleFileUpload(HttpServletRequest request) {
        Iterator<String> fileNames = ((MultipartHttpServletRequest) request).getFileNames();
        JSONObject result = null;
        while (fileNames.hasNext()) {
            String next = fileNames.next();
            MultipartFile file = ((MultipartHttpServletRequest) request).getFile(next);
            System.out.println("file.getName():" + file.getName());
            System.out.println("file.getOriginalFilename():" + file.getOriginalFilename());
            String folder = "E:\\upload\\received\\";
            String picName = new Date().getTime() + ".jpg";
            File filelocal = new File(folder, picName);
            result = new JSONObject();
            result.put(picName, folder + picName);
            try {
                file.transferTo(filelocal);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("error_code", 223805);
        jsonObject.put("reason", "文件過(guò)大或上傳發(fā)生錯(cuò)誤");
        Random random = new Random();
        if (random.nextInt(10) > 3) {
            jsonObject.put("error_code", 0);
            jsonObject.put("reason", "success");
 
            jsonObject.put("result", result);
        }
        return jsonObject;
    }
 
    /**
     * 知道參數(shù)名的文件上傳
     *
     * @param multipartFile 文件
     * @return 返回
     * @throws IOException
     */
    @PostMapping("/uploadCommon")
    //public JSONObject upload(MultipartFile multipartFile) throws IOException {
    public JSONObject upload(@RequestParam("A") MultipartFile multipartFile) throws IOException {
        String name = multipartFile.getName();//上傳文件的參數(shù)名
        String originalFilename = multipartFile.getOriginalFilename();//上傳文件的文件路徑名
        long size = multipartFile.getSize();//文件大小
        String folder = "E:\\upload\\received\\";
        String picName = new Date().getTime() + ".jpg";
        File filelocal = new File(folder, picName);
        multipartFile.transferTo(filelocal);
       /* {
            "reason": "success",
                "result": {
            "D": "/upload/order/files/2016/a72750ad-8950-4949-b04a-37e69aff0d23.jpg",
                    "A": "/upload/order/files/2016/6842811a-eb76-453b-a2f3-488e2bb4500e.jpg",
                    "B": "/upload/order/files/2016/ccc96347-3cb8-4e2e-99a3-0c697b57eb88.jpg",
                    "C": "/upload/order/files/2016/d470d533-a54b-406a-a0f9-bbf82c314755.jpg"
        },
            "error_code": 0
        }*/
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("error_code", 223805);
        jsonObject.put("reason", "文件過(guò)大或上傳發(fā)生錯(cuò)誤");
        Random random = new Random();
        if (random.nextInt(10) > 3) {
            jsonObject.put("error_code", 0);
            jsonObject.put("reason", "success");
            JSONObject result = new JSONObject();
            result.put(name, folder + picName);
            jsonObject.put("result", result);
        }
        return jsonObject;
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java基于高精度整型實(shí)現(xiàn)fibonacci數(shù)列的方法

    Java基于高精度整型實(shí)現(xiàn)fibonacci數(shù)列的方法

    這篇文章主要介紹了Java基于高精度整型實(shí)現(xiàn)fibonacci數(shù)列的方法,是比較典型的算法,需要的朋友可以參考下
    2014-09-09
  • 使用jib插件為Java應(yīng)用構(gòu)建鏡像的方法

    使用jib插件為Java應(yīng)用構(gòu)建鏡像的方法

    這篇文章主要介紹了使用jib插件為Java應(yīng)用構(gòu)建鏡像,要是用戶(hù)本地沒(méi)安裝docker,可以使用jib制作出帶有鏡像的tar文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • JavaEE線程安全定時(shí)器模式任務(wù)

    JavaEE線程安全定時(shí)器模式任務(wù)

    這篇文章主要介紹了JavaEE線程安全定時(shí)器模式任務(wù),定時(shí)器模式像是一個(gè)鬧鐘定時(shí),在一定時(shí)間之后被喚醒并執(zhí)行某個(gè)之前設(shè)定好的任務(wù),感興趣的小伙伴可以參考一下
    2022-06-06
  • Java中seata框架的XA模式詳解

    Java中seata框架的XA模式詳解

    這篇文章主要介紹了Java中seata框架的XA模式詳解,Seata?是一款開(kāi)源的分布式事務(wù)解決方案,致力于提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù),Seata?將為用戶(hù)提供了?AT、TCC、SAGA?和?XA?事務(wù)模式,為用戶(hù)打造一站式的分布式解決方案,需要的朋友可以參考下
    2023-08-08
  • Spring用代碼來(lái)讀取properties文件實(shí)例解析

    Spring用代碼來(lái)讀取properties文件實(shí)例解析

    這篇文章主要介紹了Spring用代碼來(lái)讀取properties文件實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 用Eclipse生成JPA元模型的方法

    用Eclipse生成JPA元模型的方法

    下面小編就為大家?guī)?lái)一篇用Eclipse生成JPA元模型的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Java8 如何移除兩個(gè)相同的List對(duì)象

    Java8 如何移除兩個(gè)相同的List對(duì)象

    這篇文章主要介紹了Java8 如何移除兩個(gè)相同的List對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot整合Swagger3生成接口文檔的示例代碼

    SpringBoot整合Swagger3生成接口文檔的示例代碼

    Swagger 是一個(gè) RESTful API 的開(kāi)源框架,它的主要目的是幫助開(kāi)發(fā)者設(shè)計(jì)、構(gòu)建、文檔化和測(cè)試 Web API,本文給大家介紹了SpringBoot整合Swagger3生成接口文檔的流程,并通過(guò)代碼講解的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • SpringBoot+MySQL+Jpa實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查和分頁(yè)詳解

    SpringBoot+MySQL+Jpa實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查和分頁(yè)詳解

    這篇文章主要介紹了SpringBoot+MySQL+Jpa實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查和分頁(yè)詳解,需要的朋友可以參考下
    2020-02-02
  • 使用SpringMVC響應(yīng)json格式返回的結(jié)果類(lèi)型

    使用SpringMVC響應(yīng)json格式返回的結(jié)果類(lèi)型

    這篇文章主要介紹了使用SpringMVC響應(yīng)json格式返回的結(jié)果類(lèi)型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

丁青县| 内黄县| 卢龙县| 台山市| 南平市| 吴旗县| 田东县| 洛宁县| 军事| 紫阳县| 贺兰县| 博白县| 无棣县| 彩票| 巨野县| 深水埗区| 郸城县| 临海市| 山阳县| 枣强县| 宜黄县| 鄯善县| 靖宇县| 永寿县| 乐昌市| 都兰县| 满城县| 昌邑市| 南丹县| 文山县| 江都市| 自治县| 丰台区| 丰镇市| 德清县| 上蔡县| 漯河市| 分宜县| 汉寿县| 高州市| 南漳县|