亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringBoot 文件上傳和下載的實現源碼

2024-07-14 08:39:49
字體:
來源:轉載
供稿:網友

本篇文章介紹SpringBoot的上傳和下載功能。

一、創建SpringBoot工程,添加依賴

compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-thymeleaf") 

工程目錄為:

spring,boot,文件上傳,下載

Application.java 啟動類

package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @SpringBootApplication public class Application {   public static void main(String[] args) {     SpringApplication.run(Application.class, args);   } } 

二、創建測試頁面

在resources/templates目錄下新建uploadForm.html

<html xmlns:th="http://www.thymeleaf.org"> <body>   <div th:if="${message}">     <h2 th:text="${message}"/>   </div>   <div>     <form method="POST" enctype="multipart/form-data" action="/">       <table>         <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>         <tr><td></td><td><input type="submit" value="Upload" /></td></tr>       </table>     </form>   </div>   <div>     <ul>       <li th:each="file : ${files}">         <a th:href="${file}" rel="external nofollow" th:text="${file}" />       </li>     </ul>   </div> </body> </html> 

三、新建StorageService服務

StorageService接口 

package hello.storage; import org.springframework.core.io.Resource; import org.springframework.web.multipart.MultipartFile; import java.nio.file.Path; import java.util.stream.Stream; public interface StorageService {   void init();   void store(MultipartFile file);   Stream<Path> loadAll();   Path load(String filename);   Resource loadAsResource(String filename);   void deleteAll(); } 

StorageService實現

package hello.storage; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.springframework.stereotype.Service; import org.springframework.util.FileSystemUtils; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.net.MalformedURLException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.function.Predicate; import java.util.stream.Stream; @Service public class FileSystemStorageService implements StorageService {   private final Path rootLocation = Paths.get("upload-dir");   /**    * 保存文件    *    * @param file 文件    */   @Override   public void store(MultipartFile file)   {     String filename = StringUtils.cleanPath(file.getOriginalFilename());     try     {       if (file.isEmpty())       {         throw new StorageException("Failed to store empty file " + filename);       }       if (filename.contains(".."))       {         // This is a security check         throw new StorageException("Cannot store file with relative path outside current directory " + filename);       }       Files.copy(file.getInputStream(), this.rootLocation.resolve(filename), StandardCopyOption.REPLACE_EXISTING);     }     catch (IOException e)     {       throw new StorageException("Failed to store file " + filename, e);     }   }   /**    * 列出upload-dir下面所有文件    * @return    */   @Override   public Stream<Path> loadAll()   {     try     {       return Files.walk(this.rootLocation, 1) //path -> !path.equals(this.rootLocation)           .filter(new Predicate<Path>()           {             @Override             public boolean test(Path path)             {               return !path.equals(rootLocation);             }           });     }     catch (IOException e)     {       throw new StorageException("Failed to read stored files", e);     }   }   @Override   public Path load(String filename)   {     return rootLocation.resolve(filename);   }   /**    * 獲取文件資源    * @param filename 文件名    * @return Resource    */   @Override   public Resource loadAsResource(String filename)   {     try     {       Path file = load(filename);       Resource resource = new UrlResource(file.toUri());       if (resource.exists() || resource.isReadable())       {         return resource;       }       else       {         throw new StorageFileNotFoundException("Could not read file: " + filename);       }     }     catch (MalformedURLException e)     {       throw new StorageFileNotFoundException("Could not read file: " + filename, e);     }   }   /**    * 刪除upload-dir目錄所有文件    */   @Override   public void deleteAll()   {     FileSystemUtils.deleteRecursively(rootLocation.toFile());   }   /**    * 初始化    */   @Override   public void init()   {     try     {       Files.createDirectories(rootLocation);     }     catch (IOException e)     {       throw new StorageException("Could not initialize storage", e);     }   } } 

StorageException.java

package hello.storage; public class StorageException extends RuntimeException {   public StorageException(String message) {     super(message);   }   public StorageException(String message, Throwable cause) {     super(message, cause);   } } StorageFileNotFoundException.javapackage hello.storage; public class StorageFileNotFoundException extends StorageException {   public StorageFileNotFoundException(String message) {     super(message);   }   public StorageFileNotFoundException(String message, Throwable cause) {     super(message, cause);   } } 

四、Controller創建

將上傳的文件,放到工程的upload-dir目錄,默認在界面上列出可以下載的文件。

listUploadedFiles函數,會列出當前目錄下的所有文件

serveFile下載文件

handleFileUpload上傳文件

package hello;  import java.io.IOException; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import hello.storage.StorageFileNotFoundException; import hello.storage.StorageService; @Controller public class FileUploadController {   private final StorageService storageService;   @Autowired   public FileUploadController(StorageService storageService) {     this.storageService = storageService;   }   @GetMapping("/")   public String listUploadedFiles(Model model) throws IOException {     model.addAttribute("files", storageService.loadAll().map(         path -> MvcUriComponentsBuilder.fromMethodName(FileUploadController.class,             "serveFile", path.getFileName().toString()).build().toString())         .collect(Collectors.toList()));     return "uploadForm";   }   @GetMapping("/files/{filename:.+}")   @ResponseBody   public ResponseEntity<Resource> serveFile(@PathVariable String filename) {     Resource file = storageService.loadAsResource(filename);     return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,         "attachment; filename=/"" + file.getFilename() + "/"").body(file);   }   @PostMapping("/")   public String handleFileUpload(@RequestParam("file") MultipartFile file,       RedirectAttributes redirectAttributes) {     storageService.store(file);     redirectAttributes.addFlashAttribute("message",         "You successfully uploaded " + file.getOriginalFilename() + "!");     return "redirect:/";   }   @ExceptionHandler(StorageFileNotFoundException.class)   public ResponseEntity<?> handleStorageFileNotFound(StorageFileNotFoundException exc) {     return ResponseEntity.notFound().build();   } } 

源碼下載:https://github.com/HelloKittyNII/SpringBoot/tree/master/SpringBootUploadAndDownload

總結

以上所述是小編給大家介紹的SpringBoot 文件上傳和下載的實現源碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女av在线| 日日骚久久av| 久精品免费视频| 国产免费一区二区三区在线观看| 18久久久久久| 久久精品国产精品| 奇门遁甲1982国语版免费观看高清| 精品国产福利视频| 九九视频这里只有精品| 亚洲精品久久久久久久久久久久| 亚洲欧洲国产一区| 亚洲肉体裸体xxxx137| 国产一区二区三区视频| 日韩在线免费视频| 成人免费看吃奶视频网站| 亚洲欧美中文字幕在线一区| 91高潮精品免费porn| 亚洲人成毛片在线播放| 久久久久久这里只有精品| 亚洲精品免费网站| 欧美亚洲激情在线| 国产自产女人91一区在线观看| 国产精品视频一区二区三区四| 国产精品aaaa| 色综合伊人色综合网| 亚洲电影天堂av| 国产日韩专区在线| 日韩电影大全免费观看2023年上| 久久精品亚洲一区| 欧美肥婆姓交大片| 亚洲欧洲偷拍精品| 成人做爽爽免费视频| 日韩精品有码在线观看| 欧美日韩性视频在线| 久久99久久99精品免观看粉嫩| 日本成人在线视频网址| 欧美国产视频一区二区| 欧美日韩国产影院| 国产精品久久久av久久久| 国语自产偷拍精品视频偷| 久久久久久久久久久av| 91性高湖久久久久久久久_久久99| 精品国产一区二区三区久久狼黑人| xxxx欧美18另类的高清| 成人女保姆的销魂服务| 久久人91精品久久久久久不卡| 国产丝袜一区视频在线观看| 欧美激情区在线播放| 国产精品综合网站| www.久久草.com| 亚洲视频在线免费观看| 国产精品99蜜臀久久不卡二区| 亚洲国产日韩欧美综合久久| 日本精品久久久| 97涩涩爰在线观看亚洲| 国产精品美乳在线观看| 国产美女91呻吟求| 久久不射电影网| 亚洲精品在线不卡| 国产视频久久久久| 国产69精品久久久久99| 亚洲人av在线影院| 欧美一级电影久久| 欧美一区二区三区免费视| 亚洲成色777777在线观看影院| 精品久久久久久国产| 亚洲激情电影中文字幕| 大胆欧美人体视频| 中文字幕国产日韩| 国外色69视频在线观看| 在线看日韩欧美| 国产91精品青草社区| 国产欧美精品在线播放| 国产亚洲免费的视频看| 欧美疯狂性受xxxxx另类| 欧美激情免费观看| 日韩欧美国产激情| 久久久久久久久久久成人| 亚洲第一福利视频| 国产亚洲激情在线| 在线播放日韩专区| 欧美激情在线观看视频| 亚洲片国产一区一级在线观看| 久久91亚洲精品中文字幕奶水| 国产精品色视频| 国内精品在线一区| 成人在线视频福利| 国产日韩在线亚洲字幕中文| 国产专区精品视频| 日韩成人激情在线| 91精品国产91久久久久久| 久热99视频在线观看| 亚洲美女www午夜| 色综合色综合久久综合频道88| 日韩暖暖在线视频| 精品国产精品自拍| 久久99精品久久久久久青青91| 国产亚洲综合久久| 久久久久久一区二区三区| 欧美在线激情网| 91免费综合在线| 九九九热精品免费视频观看网站| 免费成人高清视频| 岛国av一区二区三区| 欧美午夜视频一区二区| 欧美日韩在线视频一区| 亚洲免费电影一区| 亚洲国产精品久久久久久| 97色在线播放视频| 欧美一区二区影院| 国产精品色视频| 色综合视频一区中文字幕| 色伦专区97中文字幕| 91中文精品字幕在线视频| 7777精品视频| 中国人与牲禽动交精品| 亚洲欧美中文字幕| 国产精品96久久久久久又黄又硬| 日韩欧美在线视频日韩欧美在线视频| 日韩黄在线观看| 日韩一区二区精品视频| 国产精品极品美女粉嫩高清在线| 久操成人在线视频| 久久久久久久久国产精品| 91久久精品国产91性色| 欧美在线视频a| 57pao成人国产永久免费| 精品国偷自产在线视频| 一本色道久久综合亚洲精品小说| 精品国产一区二区三区久久| 国产欧亚日韩视频| 亚洲一区二区久久久久久久| 欧美日韩aaaa| 亚洲天天在线日亚洲洲精| 亚洲男人第一av网站| 亚洲自拍欧美另类| 亚洲白虎美女被爆操| 国产精品亚洲аv天堂网| 亚洲欧美在线免费观看| 欧美性猛交xxxx乱大交| 91嫩草在线视频| 国产精品直播网红| 成人高h视频在线| 91精品久久久久久久久青青| 九九久久久久久久久激情| 日韩av网站导航| 高跟丝袜欧美一区| 欧美日韩国产123| 91高清视频在线免费观看| 成人精品视频99在线观看免费| 欧美大片免费观看| 久久久久久噜噜噜久久久精品| 欧美日韩精品中文字幕| 最近中文字幕日韩精品| 精品欧美一区二区三区| 久久香蕉频线观| 全亚洲最色的网站在线观看| 久久久999精品| 北条麻妃一区二区三区中文字幕| 亚洲国内高清视频| 亚洲精品日韩激情在线电影| 亚洲人成网在线播放| 国产+成+人+亚洲欧洲| 亚洲性线免费观看视频成熟|