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

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

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

引言

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

1. 引入依賴

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

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

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

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

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 {
 
    // 文件保存路徑(可以通過配置文件進(jìn)行配置)
    @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);
    }
 
    // 文件預(yù)覽(主要針對圖片、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

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

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

確保在你的系統(tǒng)上已經(jī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. 測試上傳、下載和預(yù)覽

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 文件預(yù)覽

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

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

6. 處理大文件上傳

對于大文件上傳,Spring Boot默認(rèn)的最大上傳文件大小可能不滿足需求,可以通過以下配置進(jìn)行調(diào)整:

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. 文件預(yù)覽類型支持

通常情況下,瀏覽器支持預(yù)覽的文件類型包括圖片(如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實(shí)現(xiàn)文件的上傳、下載和預(yù)覽功能的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot文件上傳、下載和預(yù)覽的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

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

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

    Java常見內(nèi)存溢出異常分析與解決

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

    java異步調(diào)用Feign接口空指針問題解決

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

    解決idea導(dǎo)入ssm項目啟動tomcat報錯404的問題

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

    Java讀取properties文件內(nèi)容的幾種方式詳解

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

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

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

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

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

最新評論

洮南市| 正蓝旗| 湘潭市| 岢岚县| 武夷山市| 贡觉县| 嵊泗县| 罗山县| 工布江达县| 眉山市| 威远县| 天柱县| 满洲里市| 鹤岗市| 滕州市| 淮北市| 福州市| 东乌珠穆沁旗| 武隆县| 虞城县| 赤水市| 正宁县| 澜沧| 南木林县| 昭平县| 会理县| 祁阳县| 武城县| 增城市| 闻喜县| 仁寿县| 凉城县| 重庆市| 临澧县| 津南区| 邓州市| 安康市| 自治县| 含山县| 巴南区| 三都|