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

SpringBoot實現(xiàn)文件的上傳、下載和預覽功能

 更新時間:2024年08月19日 09:18:05   作者:戰(zhàn)族狼魂  
在Spring Boot項目中實現(xiàn)文件的上傳、下載和預覽功能,可以通過使用Spring MVC的MultipartFile接口來處理文件上傳,并使用HttpServletResponse或Resource來實現(xiàn)文件下載和預覽,下面是如何實現(xiàn)這些功能的完整示例,需要的朋友可以參考下

引言

在Spring Boot項目中實現(xiàn)文件的上傳、下載和預覽功能,可以通過使用Spring MVC的MultipartFile接口來處理文件上傳,并使用HttpServletResponse或Resource來實現(xiàn)文件下載和預覽。下面是如何實現(xiàn)這些功能的完整示例。

1. 引入依賴

確保在pom.xml中引入了Spring Boot的相關依賴。通常情況下,Spring Boot Starter Web已經包含了必要的依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 創(chuàng)建文件上傳、下載和預覽的Controller

你可以創(chuàng)建一個FileController來處理文件的上傳、下載和預覽。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
 
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;
 
@Controller
@RequestMapping("/files")
public class FileController {
 
    // 文件保存路徑(可以通過配置文件進行配置)
    @Value("${file.upload-dir}")
    private String fileUploadDir;
 
    // 文件上傳
    @PostMapping("/upload")
    @ResponseBody
    public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        // 獲取文件名并且保存文件
        String fileName = file.getOriginalFilename();
        Path targetLocation = Paths.get(fileUploadDir).resolve(fileName);
        Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
 
        // 返回文件下載的URL
        String fileDownloadUri = ServletUriComponentsBuilder.fromCurrentContextPath()
                .path("/files/download/")
                .path(fileName)
                .toUriString();
 
        return "File uploaded successfully: " + fileDownloadUri;
    }
 
    // 文件下載
    @GetMapping("/download/{fileName}")
    public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) throws MalformedURLException {
        Path filePath = Paths.get(fileUploadDir).resolve(fileName).normalize();
        Resource resource = new UrlResource(filePath.toUri());
 
        if (!resource.exists()) {
            return ResponseEntity.notFound().build();
        }
 
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
                .body(resource);
    }
 
    // 文件預覽(主要針對圖片、PDF等可以直接在瀏覽器中顯示的文件)
    @GetMapping("/preview/{fileName}")
    public ResponseEntity<Resource> previewFile(@PathVariable String fileName) throws MalformedURLException {
        Path filePath = Paths.get(fileUploadDir).resolve(fileName).normalize();
        Resource resource = new UrlResource(filePath.toUri());
 
        if (!resource.exists()) {
            return ResponseEntity.notFound().build();
        }
 
        String contentType = "application/octet-stream";
        try {
            contentType = Files.probeContentType(filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType(contentType))
                .body(resource);
    }
}

3. 配置文件上傳目錄

application.propertiesapplication.yml中配置文件的上傳路徑:

file.upload-dir=C:/uploads

或者使用application.yml

file:
  upload-dir: C:/uploads

你可以將路徑配置為你項目的目錄,也可以指定到服務器的某個位置。

4. 創(chuàng)建上傳目錄

確保在你的系統(tǒng)上已經創(chuàng)建了配置文件中指定的上傳目錄,比如C:/uploads。如果沒有創(chuàng)建,可以通過代碼在項目啟動時自動創(chuàng)建:

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
 
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
@Component
public class FileUploadDirectoryInitializer implements CommandLineRunner {
 
    @Value("${file.upload-dir}")
    private String fileUploadDir;
 
    @Override
    public void run(String... args) throws Exception {
        Path uploadPath = Paths.get(fileUploadDir);
        if (!Files.exists(uploadPath)) {
            Files.createDirectories(uploadPath);
        }
    }
}

5. 測試上傳、下載和預覽

5.1 文件上傳

你可以使用Postman、cURL或者前端頁面來測試文件上傳功能。上傳文件的URL為:

POST http://localhost:8080/files/upload

參數(shù)名稱為file。

5.2 文件下載

你可以通過以下URL下載文件:

GET http://localhost:8080/files/download/{fileName}

其中{fileName}是文件的名稱。

5.3 文件預覽

你可以通過以下URL預覽文件(如圖片或PDF):

GET http://localhost:8080/files/preview/{fileName}

6. 處理大文件上傳

對于大文件上傳,Spring Boot默認的最大上傳文件大小可能不滿足需求,可以通過以下配置進行調整:

spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB

或者在application.yml中:

spring:
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB

7. 文件預覽類型支持

通常情況下,瀏覽器支持預覽的文件類型包括圖片(如jpeg、png)、PDF、文本文件等。如果文件類型不被瀏覽器支持,通??梢酝ㄟ^文件下載的方式處理。

8. 文件刪除功能(可選)

你也可以添加一個刪除文件的接口,來刪除已上傳的文件:

// 文件刪除
@DeleteMapping("/delete/{fileName}")
@ResponseBody
public String deleteFile(@PathVariable String fileName) throws IOException {
    Path filePath = Paths.get(fileUploadDir).resolve(fileName).normalize();
    Files.deleteIfExists(filePath);
    return "File deleted successfully";
}

以上就是SpringBoot實現(xiàn)文件的上傳、下載和預覽功能的詳細內容,更多關于SpringBoot文件上傳、下載和預覽的資料請關注腳本之家其它相關文章!

相關文章

  • Java報錯狀態(tài)碼快速定位與解決方法

    Java報錯狀態(tài)碼快速定位與解決方法

    在日常開發(fā)中Java程序員最頭疼的問題之一就是遇到各種報錯狀態(tài)碼,這些狀態(tài)碼就像謎語一樣讓人摸不著頭腦,比如突然蹦出一個500或者404,新手可能會直接懵掉,別擔心!這篇文章會帶你徹底搞懂Java報錯狀態(tài)碼的來龍去脈,需要的朋友可以參考下
    2025-05-05
  • java實現(xiàn)HmacSHA256算法進行加密方式

    java實現(xiàn)HmacSHA256算法進行加密方式

    這篇文章主要介紹了java實現(xiàn)HmacSHA256算法進行加密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java中==與equals()及hashcode()三者之間的關系詳解

    Java中==與equals()及hashcode()三者之間的關系詳解

    最近也是在讀Hollis的《深入理解Java核心技術》里面一節(jié)講到了equals()和hashcode()的關系,對于這個高頻面試點,咱們需要認真理清一下幾者之間的關系
    2022-10-10
  • java連接orcale數(shù)據(jù)庫示例分享

    java連接orcale數(shù)據(jù)庫示例分享

    這篇文章主要介紹了java連接orcale數(shù)據(jù)庫示例,需要的朋友可以參考下
    2014-02-02
  • Java常見內存溢出異常分析與解決

    Java常見內存溢出異常分析與解決

    本篇文章主要分析了JAVA程序內存溢出問題原因,較為詳細的說明了java導致程序內存溢出的原因與解決方法,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • java異步調用Feign接口空指針問題解決

    java異步調用Feign接口空指針問題解決

    這篇文章主要為大家介紹了java異步調用Feign接口空指針問題解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 解決idea導入ssm項目啟動tomcat報錯404的問題

    解決idea導入ssm項目啟動tomcat報錯404的問題

    今天小編就為大家分享一篇解決idea導入ssm項目啟動tomcat報錯404的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Java讀取properties文件內容的幾種方式詳解

    Java讀取properties文件內容的幾種方式詳解

    這篇文章主要介紹了Java讀取properties文件內容的幾種方式詳解,讀取properties配置文件在實際的開發(fā)中使用的很多,本文來介紹常用的幾種實現(xiàn)方式,需要的朋友可以參考下
    2023-11-11
  • SpringBoot整合Hashids實現(xiàn)數(shù)據(jù)ID加密隱藏的全過程

    SpringBoot整合Hashids實現(xiàn)數(shù)據(jù)ID加密隱藏的全過程

    這篇文章主要為大家詳細介紹了SpringBoot整合Hashids實現(xiàn)數(shù)據(jù)ID加密隱藏的全過程,文中的示例代碼講解詳細,對大家的學習或工作有一定的幫助,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • Java判斷是否為閏年的方法示例

    Java判斷是否為閏年的方法示例

    這篇文章主要介紹了Java判斷是否為閏年的方法示例,本文直接給出示例代碼,并講解了判斷原理,需要的朋友可以參考下
    2015-06-06

最新評論

佳木斯市| 历史| 竹溪县| 石阡县| 阿克苏市| 开阳县| 拉孜县| 九龙城区| 四子王旗| 新丰县| 逊克县| 逊克县| 任丘市| 宜章县| 巩义市| 浮山县| 厦门市| 策勒县| 东山县| 历史| 桐庐县| 台州市| 望奎县| 嫩江县| 尚义县| 冀州市| 宜川县| 正镶白旗| 台南县| 卢龙县| 长寿区| 大悟县| 杂多县| 滁州市| 中江县| 日照市| 武邑县| 东乡族自治县| 搜索| 万年县| 雷波县|