国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot實(shí)現(xiàn)對(duì)超大文件進(jìn)行異步壓縮下載

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot實(shí)現(xiàn)對(duì)超大文件進(jìn)行異步壓縮下載。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?在Web應(yīng)用中,文件下載功能是一個(gè)常見的需求,特別是當(dāng)你需要提供用戶下載各種類型的文件時(shí)。本文將演示如何使用Spring Boot框架來實(shí)現(xiàn)一個(gè)簡(jiǎn)單而強(qiáng)大的文件下載功能。我們將創(chuàng)建一個(gè)RESTful API,通過該API,用戶可以下載問價(jià)為ZIP壓縮文件。

1. 創(chuàng)建Spring Boot 項(xiàng)目

首先,確保你已經(jīng)創(chuàng)建了一個(gè)Spring Boot項(xiàng)目,并在項(xiàng)目中添加了所需的依賴。在這個(gè)示例中,我們將使用Spring Boot的Web模塊和Spring的MVC框架。

2. 編寫下載控制器

創(chuàng)建一個(gè)名為DownloadController的RESTful控制器,用于處理文件下載請(qǐng)求。在這個(gè)控制器中,我們將定義一個(gè)downloadStudentWork方法,用于下載學(xué)生作品的ZIP壓縮文件。具體文件流來源與具體業(yè)務(wù)。

@RestController
@RequestMapping("/download")
public class DownloadController {

    @GetMapping("/studentWork")
    public ResponseEntity<StreamingResponseBody> downloadStudentWork() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

        String encodedFileName = "作品名稱-學(xué)生姓名.zip";
        try {
            encodedFileName = URLEncoder.encode(encodedFileName, StandardCharsets.UTF_8.toString());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        headers.setContentDispositionFormData("attachment", encodedFileName);
        StreamingResponseBody responseBody = outputStream -> {
            try (ZipOutputStream zipOut = new ZipOutputStream(outputStream)) {
                
                // 假設(shè)這是學(xué)生的作品內(nèi)容視頻文件流
                InputStream videoStream = getStudentVideoStream();
                addToZip(zipOut, videoStream, "作品視頻.mkv");

                // 添加更多附件,如果有的話

                zipOut.finish();
            } catch (IOException e) {
                // 處理異常
            }
        };

        return new ResponseEntity<>(responseBody, headers, HttpStatus.OK);
    }

    private void addToZip(ZipOutputStream zipOut, InputStream inputStream, String fileName) throws IOException {
        ZipEntry zipEntry = new ZipEntry(fileName);
        zipOut.putNextEntry(zipEntry);

        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            zipOut.write(buffer, 0, bytesRead);
        }

        zipOut.closeEntry();
        inputStream.close();
    }
    
    // 獲取文件流
    private InputStream getStudentVideoStream() throws FileNotFoundException {
        // 附件信息
        FileInputStream inputStream = new FileInputStream("C:\\Users\\28111\\Videos\\2023-09-14 21-30-36.mkv");
        return inputStream;
    }
}

當(dāng)然,也可以用這種方式進(jìn)行下載,也就是我們常用的void返回值這種方式

package com.ly.cloud.controller.artworkEntries;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

@RestController
@RequestMapping("/download")
public class DownloadController {

    @GetMapping("/studentWork")
    public void downloadStudentWork(HttpServletResponse response) {
        // 設(shè)置響應(yīng)頭信息
        response.setContentType("application/zip");
        String encodedFileName = "作品名稱-學(xué)生姓名.zip";
        try {
            encodedFileName = URLEncoder.encode(encodedFileName, StandardCharsets.UTF_8.toString());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setHeader("Content-Disposition", "attachment; filename=" + encodedFileName);
        try (OutputStream outputStream = response.getOutputStream(); ZipOutputStream zipOut = new ZipOutputStream(outputStream)) {

            // 假設(shè)這是學(xué)生的作品內(nèi)容視頻文件流
            InputStream videoStream = getStudentVideoStream();
            addToZip(zipOut, videoStream, "作品視頻.mkv");

            // 添加更多附件,如果有的話
            zipOut.finish();
        } catch (IOException e) {
            // 處理異常
        }
    }

    private void addToZip(ZipOutputStream zipOut, InputStream inputStream, String fileName) throws IOException {
        ZipEntry zipEntry = new ZipEntry(fileName);
        zipOut.putNextEntry(zipEntry);

        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            zipOut.write(buffer, 0, bytesRead);
        }

        zipOut.closeEntry();
        inputStream.close();
    }

    // 獲取文件流
    private InputStream getStudentVideoStream() throws FileNotFoundException {
        // 附件信息
        FileInputStream inputStream = new FileInputStream("C:\\Users\\28111\\Videos\\2023-09-14 21-30-36.mkv");
        return inputStream;
    }
}

下載的結(jié)果:

spring 異步下載,spring boot,后端,java

3. 設(shè)置HTTP響應(yīng)頭

downloadStudentWork方法中,我們?cè)O(shè)置HTTP響應(yīng)頭,以便告訴瀏覽器該響應(yīng)是一個(gè)可下載的二進(jìn)制文件。我們還將文件名進(jìn)行URL編碼,以確保文件名中的特殊字符不會(huì)導(dǎo)致問題。

4. 創(chuàng)建ZIP文件并添加內(nèi)容

使用Java的ZipOutputStream類,我們創(chuàng)建一個(gè)ZIP文件,并向其中添加學(xué)生作品的內(nèi)容。在示例中,我們添加了一個(gè)假設(shè)的學(xué)生作品視頻文件。

5. 提供下載流

我們使用StreamingResponseBody來提供下載文件的流,以便文件能夠逐塊傳輸給客戶端。這樣可以有效地處理大文件,而不需要將整個(gè)文件加載到內(nèi)存中。

6. 完整的示例

以上是代碼的大致結(jié)構(gòu),你可以在你的項(xiàng)目中實(shí)現(xiàn)它。請(qǐng)確保根據(jù)你的需求調(diào)整文件路徑和名稱。

7. 測(cè)試文件下載

最后,運(yùn)行你的Spring Boot應(yīng)用程序,訪問/download/studentWork端點(diǎn),你將能夠下載學(xué)生作品的ZIP文件。

結(jié)論

通過使用Spring Boot,我們很容易實(shí)現(xiàn)了一個(gè)強(qiáng)大的文件下載功能。你可以根據(jù)需要擴(kuò)展這個(gè)示例,添加更多的附件或自定義功能,以滿足你的應(yīng)用程序需求。

希望這篇文章對(duì)你有所幫助,如果有任何問題或建議,請(qǐng)隨時(shí)留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-731653.html


到了這里,關(guān)于Spring Boot實(shí)現(xiàn)對(duì)超大文件進(jìn)行異步壓縮下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot根據(jù)多階層創(chuàng)建文件,然后壓縮成壓縮包進(jìn)行下載

    SpringBoot根據(jù)多階層創(chuàng)建文件,然后壓縮成壓縮包進(jìn)行下載

    臨時(shí)接到一個(gè)需求說讓根據(jù)按照下面的這個(gè)圖片的結(jié)構(gòu)來打包下載指定位置下的文件到指定位置! 調(diào)用數(shù)據(jù),然后傳遞給創(chuàng)建文件方法進(jìn)行實(shí)現(xiàn): 遞歸的創(chuàng)建子集文件夾,然后調(diào)用工具類進(jìn)行壓縮成為壓縮包文件, 注:刪除文件必須捋清楚然后進(jìn)行使用,其實(shí)不刪除也只會(huì)在指定

    2024年01月22日
    瀏覽(17)
  • Spring Boot實(shí)現(xiàn)HTTP大文件斷點(diǎn)續(xù)傳分片下載-大視頻分段漸進(jìn)式播放

    服務(wù)端如何將一個(gè)大視頻文件做切分,分段響應(yīng)給客戶端,讓瀏覽器可以漸進(jìn)式地播放。 Spring Boot實(shí)現(xiàn)HTTP分片下載斷點(diǎn)續(xù)傳,從而實(shí)現(xiàn)H5頁面的大視頻播放問題,實(shí)現(xiàn)漸進(jìn)式播放,每次只播放需要播放的內(nèi)容就可以了,不需要加載整個(gè)文件到內(nèi)存中。 文件的斷點(diǎn)續(xù)傳、文件多

    2024年02月14日
    瀏覽(31)
  • Spring Boot 如何實(shí)現(xiàn)異步消息處理

    Spring Boot 如何實(shí)現(xiàn)異步消息處理

    在現(xiàn)代應(yīng)用程序中,異步消息處理是一項(xiàng)至關(guān)重要的任務(wù)。它可以提高應(yīng)用程序的性能、可伸縮性和可靠性,同時(shí)也可以提供更好的用戶體驗(yàn)。Spring Boot提供了多種方式來實(shí)現(xiàn)異步消息處理,包括使用Spring AMQP、Spring Kafka和Spring JMS等。本文將介紹如何使用Spring Boot實(shí)現(xiàn)異步消息

    2024年02月07日
    瀏覽(45)
  • Spring-Boot實(shí)現(xiàn)HTTP大文件斷點(diǎn)續(xù)傳分片下載-大視頻分段漸進(jìn)式播放

    服務(wù)端如何將一個(gè)大視頻文件做切分,分段響應(yīng)給客戶端,讓瀏覽器可以漸進(jìn)式地播放。 Spring Boot實(shí)現(xiàn)HTTP分片下載斷點(diǎn)續(xù)傳,從而實(shí)現(xiàn)H5頁面的大視頻播放問題,實(shí)現(xiàn)漸進(jìn)式播放,每次只播放需要播放的內(nèi)容就可以了,不需要加載整個(gè)文件到內(nèi)存中。 文件的斷點(diǎn)續(xù)傳、文件多

    2024年02月11日
    瀏覽(31)
  • 使用hutool工具,對(duì)多文件下載進(jìn)行打包下載,這里使用的是zip壓縮算法。

    參考以下博主: Java實(shí)現(xiàn)文件下載zip包單文件等_java下載zip文件_liu.kai的博客-CSDN博客 先將需要壓縮的文件們打包在一塊生成一個(gè)臨時(shí)壓縮包 將這個(gè)臨時(shí)的壓縮包,以單文件下載的方式,給前端響應(yīng)過去 刪除臨時(shí)的壓縮包

    2024年02月04日
    瀏覽(28)
  • Spring MVC異步上傳、跨服務(wù)器上傳和文件下載

    Spring MVC異步上傳、跨服務(wù)器上傳和文件下載

    之前的上傳方案,在上傳成功后都會(huì)跳轉(zhuǎn)頁面。而在實(shí)際開發(fā)中,很多情況下上傳后不進(jìn)行跳轉(zhuǎn),而是進(jìn)行頁面的局部刷新,比如:上傳頭像成功后將頭像顯示在網(wǎng)頁中。這時(shí)候就需要使用異步文件上傳。 編寫JSP頁面,引入jQuery和jQuery表單上傳工具jquery.form.js【該js文件已經(jīng)

    2024年02月16日
    瀏覽(31)
  • Spring Boot使用@Async實(shí)現(xiàn)異步調(diào)用:自定義線程池

    第一步,先在Spring Boot主類中定義一個(gè)線程池,比如: 上面我們通過使用?? ThreadPoolTaskExecutor ??創(chuàng)建了一個(gè)線程池,同時(shí)設(shè)置了以下這些參數(shù): 核心線程數(shù)10:線程池創(chuàng)建時(shí)候初始化的線程數(shù) 最大線程數(shù)20:線程池最大的線程數(shù),只有在緩沖隊(duì)列滿了之后才會(huì)申請(qǐng)超過核

    2024年02月14日
    瀏覽(26)
  • Spring Boot 中實(shí)現(xiàn)文件上傳、下載、刪除功能

    Spring Boot 中實(shí)現(xiàn)文件上傳、下載、刪除功能

    ??作者簡(jiǎn)介,普修羅雙戰(zhàn)士,一直追求不斷學(xué)習(xí)和成長(zhǎng),在技術(shù)的道路上持續(xù)探索和實(shí)踐。 ??多年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??歡迎 ??點(diǎn)贊?評(píng)論?收藏 ?? SpringBoot 領(lǐng)域知識(shí) ?? 鏈接 專欄 SpringBoot 專業(yè)知識(shí)學(xué)習(xí)一 SpringBoot專欄 Sprin

    2024年01月19日
    瀏覽(35)
  • 使用XMLHttpRequest實(shí)現(xiàn)文件異步下載

    使用XMLHttpRequest實(shí)現(xiàn)文件異步下載

    ? ? ? ? 我想通過異步的方式實(shí)現(xiàn)下載文化,請(qǐng)求為post請(qǐng)求。一開始我打算用ajax。 ????????不過ajax的返回類型不支持二進(jìn)制文件流(binary)!因此ajax的異步方式無法接到后端接口返回的文件流,就無法下載文件。 jQuery.ajax() | jQuery API Documentation ? ? ? ? 改用dom原生的XMLH

    2024年02月14日
    瀏覽(19)
  • 前端實(shí)現(xiàn)下載文件(包含壓縮包下載)方式匯總

    默認(rèn)最簡(jiǎn)單的下載方式是: window.open(后臺(tái)接口API路徑) ,但該方法弊端:因是新開窗口方式,前端展示上,每次會(huì)閃下。 此外,如果使用window.open(文件URL)方式: pdf、office文檔、psd:直接下載。 圖片、txt:新開窗口預(yù)覽,不會(huì)下載;且txt預(yù)覽,有時(shí)出現(xiàn)中文亂碼問題。 一、

    2024年02月10日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包