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

詳解SpringBoot下文件上傳與下載的實(shí)現(xiàn)

 更新時(shí)間:2019年05月20日 15:50:27   作者:喝酒不騎馬  
這篇文章主要介紹了SpringBoot下文件上傳與下載的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

SpringBoot后臺(tái)如何實(shí)現(xiàn)文件上傳下載?

最近做的一個(gè)項(xiàng)目涉及到文件上傳與下載。前端上傳采用百度webUploader插件。有關(guān)該插件的使用方法還在研究中,日后整理再記錄。本文主要介紹SpringBoot后臺(tái)對(duì)文件上傳與下載的處理。

單文件上傳

/ 單文件上傳
@RequestMapping(value = "/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
  try {
  if (file.isEmpty()) {
    return "文件為空";
  }
  // 獲取文件名
  String fileName = file.getOriginalFilename();
  logger.info("上傳的文件名為:" + fileName);
  // 獲取文件的后綴名
  String suffixName = fileName.substring(fileName.lastIndexOf("."));
  logger.info("文件的后綴名為:" + suffixName);

  // 設(shè)置文件存儲(chǔ)路徑
  String filePath = "D://aim//";
  String path = filePath + fileName + suffixName;

  File dest = new File(path);
  // 檢測(cè)是否存在目錄
  if (!dest.getParentFile().exists()) {
    dest.getParentFile().mkdirs();// 新建文件夾
  }
  file.transferTo(dest);// 文件寫入
  return "上傳成功";
  } catch (IllegalStateException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return "上傳失敗";
}

如果想要修改文件路徑及文件名,修改filePath以及fileName即可。

多文件上傳

/多文件上傳
@RequestMapping(value = "/uploadMore", method = RequestMethod.POST)
@ResponseBody
public String handleFileUpload(HttpServletRequest request) {
  List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
  MultipartFile file = null;
  BufferedOutputStream stream = null;
  for (int i = 0; i < files.size(); ++i) {
    file = files.get(i);
    String filePath = "D://aim//";
    if (!file.isEmpty()) {
      try {
        byte[] bytes = file.getBytes();
        stream = new BufferedOutputStream(new FileOutputStream(
            new File(filePath + file.getOriginalFilename())));//設(shè)置文件路徑及名字
        stream.write(bytes);// 寫入
        stream.close();
      } catch (Exception e) {
        stream = null;
        return "第 " + i + " 個(gè)文件上傳失敗 ==> "
            + e.getMessage();
      }
    } else {
      return "第 " + i
          + " 個(gè)文件上傳失敗因?yàn)槲募榭?;
    }
  }
  return "上傳成功";
}

文件下載

//文件下載相關(guān)代碼
@RequestMapping("/download")
public String downloadFile(HttpServletRequest request, HttpServletResponse response) {
  String fileName = "aim_test.txt";// 設(shè)置文件名,根據(jù)業(yè)務(wù)需要替換成要下載的文件名
  if (fileName != null) {
    //設(shè)置文件路徑
    String realPath = "D://aim//"
    File file = new File(realPath , fileName);
    if (file.exists()) {
      response.setContentType("application/force-download");// 設(shè)置強(qiáng)制下載不打開
      response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 設(shè)置文件名
      byte[] buffer = new byte[1024];
      FileInputStream fis = null;
      BufferedInputStream bis = null;
      try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
        OutputStream os = response.getOutputStream();
        int i = bis.read(buffer);
        while (i != -1) {
          os.write(buffer, 0, i);
          i = bis.read(buffer);
        }
        System.out.println("success");
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        if (bis != null) {
          try {
            bis.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
        if (fis != null) {
          try {
            fis.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
    }
  }
  return null;
}

MultipartConfig配置

可以通過MultipartConfig配置類對(duì)文件上傳進(jìn)行全局控制。

@Configuration
public class MultipartConfig {

  @Bean
  public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    // 置文件大小限制 ,超出此大小頁面會(huì)拋出異常信息
    factory.setMaxFileSize("2MB"); //KB,MB
    // 設(shè)置總上傳數(shù)據(jù)總大小
    factory.setMaxRequestSize("20MB");
    // 設(shè)置文件臨時(shí)文件夾路徑
    // factory.setLocation("E://test//");
    // 如果文件大于這個(gè)值,將以文件的形式存儲(chǔ),如果小于這個(gè)值文件將存儲(chǔ)在內(nèi)存中,默認(rèn)為0
    // factory.setMaxRequestSize(0);
    return factory.createMultipartConfig();
  }
}

注意事項(xiàng)

前后端文件傳輸格式應(yīng)為 multipart/form-data

以上所述是小編給大家介紹的SpringBoot下文件上傳與下載的實(shí)現(xiàn)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java接口定義與實(shí)現(xiàn)方法分析

    Java接口定義與實(shí)現(xiàn)方法分析

    這篇文章主要介紹了Java接口定義與實(shí)現(xiàn)方法,簡(jiǎn)單說明了接口的概念、功能,并結(jié)合實(shí)例形式分析了接口的相關(guān)定義與使用技巧,需要的朋友可以參考下
    2017-11-11
  • Java實(shí)現(xiàn)JDK動(dòng)態(tài)代理的原理詳解

    Java實(shí)現(xiàn)JDK動(dòng)態(tài)代理的原理詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)JDK動(dòng)態(tài)代理的原理詳解,Java常用的動(dòng)態(tài)代理模式有JDK動(dòng)態(tài)代理,也有cglib動(dòng)態(tài)代理,本文重點(diǎn)講解JDK的動(dòng)態(tài)代理,需要的小伙伴可以參考一下的相關(guān)資料
    2022-07-07
  • SpringBoot2零基礎(chǔ)到精通之profile功能與自定義starter

    SpringBoot2零基礎(chǔ)到精通之profile功能與自定義starter

    SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)profile功能與自定義starter
    2022-03-03
  • Java編程思想對(duì)象的容納實(shí)例詳解

    Java編程思想對(duì)象的容納實(shí)例詳解

    這篇文章主要介紹了Java編程思想對(duì)象的容納實(shí)例詳解,內(nèi)容比較詳細(xì),涵蓋的東西也比較多,具有參考價(jià)值,需要的朋友了解下。
    2017-09-09
  • springboot項(xiàng)目讀取resources目錄下的文件的9種方式

    springboot項(xiàng)目讀取resources目錄下的文件的9種方式

    本文主要介紹了springboot項(xiàng)目讀取resources目錄下的文件的9種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Mybatis模糊查詢和動(dòng)態(tài)sql語句的用法

    Mybatis模糊查詢和動(dòng)態(tài)sql語句的用法

    今天小編就為大家分享一篇關(guān)于Mybatis模糊查詢和動(dòng)態(tài)sql語句的用法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Spring Boot security 默認(rèn)攔截靜態(tài)資源的解決方法

    Spring Boot security 默認(rèn)攔截靜態(tài)資源的解決方法

    這篇文章主要介紹了Spring Boot security 默認(rèn)攔截靜態(tài)資源,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot實(shí)現(xiàn)緩存組件配置動(dòng)態(tài)切換的步驟詳解

    SpringBoot實(shí)現(xiàn)緩存組件配置動(dòng)態(tài)切換的步驟詳解

    現(xiàn)在有多個(gè)springboot項(xiàng)目,但是不同的項(xiàng)目中使用的緩存組件是不一樣的,有的項(xiàng)目使用redis,有的項(xiàng)目使用ctgcache,現(xiàn)在需要用同一套代碼通過配置開關(guān),在不同的項(xiàng)目中切換這兩種緩存,本文介紹了SpringBoot實(shí)現(xiàn)緩存組件配置動(dòng)態(tài)切換的步驟,需要的朋友可以參考下
    2024-07-07
  • 詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案

    詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案

    這篇文章主要介紹了詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案,本文分兩步,通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 關(guān)于JWT之token令牌認(rèn)證登錄

    關(guān)于JWT之token令牌認(rèn)證登錄

    這篇文章主要介紹了關(guān)于JWT之token令牌認(rèn)證登錄,使用JWT能夠保證Token的安全性,且能夠進(jìn)行Token時(shí)效性的檢驗(yàn),使用JWT時(shí),登錄成功后將用戶信息生成一串令牌字符串,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

泾源县| 屏边| 酉阳| 横峰县| 拉孜县| 毕节市| 三台县| 苏州市| 敦煌市| 东乌| 页游| 石屏县| 广昌县| 炉霍县| 牡丹江市| 曲阳县| 恩平市| 芦溪县| 柞水县| 七台河市| 平乐县| 东光县| 丹棱县| 新龙县| 叙永县| 广水市| 昆明市| 台前县| 绍兴县| 平邑县| 龙川县| 泉州市| 德清县| 巴楚县| 旺苍县| 偏关县| 平舆县| 康乐县| 延寿县| 永川市| 台南县|