文件斷點續傳(視頻播放,大文件下載)

客戶端每次請求取大文件部分數據。

瀏覽器播放mp4視頻時,會首先傳Range消息頭,檢測到206狀態碼,和Content-Range,Accept-Ranges 會自動請求余下數據。后端需要在文件任意偏移量取數據。

參考:

springboot項目實現斷點續傳功能_java_腳本之家

springboot大文件上傳、分片上傳、斷點續傳、秒傳的實現_java_腳本之家

springboot 大文件上傳、分片上傳、斷點續傳、秒傳_getmodelrw-CSDN博客

https://juejin.cn/post/7387915277318520869

在SpringBoot中實現斷點續傳的實例代碼_java_腳本之家

?主要代碼:

    private void videoPlayRange(String taskCode, String fileName) {File file = getVideoFile(taskCode, fileName);long fileLength = file.length();String range = request.getHeader("Range");long start = 0, end = fileLength - 1;if (range != null) {String[] ranges = range.replace("bytes=", "").split("-");start = Long.parseLong(ranges[0]);end = Math.min(fileLength - 1,start + maxPartSize*1024*1024-1);end = ranges.length > 1 ? Long.parseLong(ranges[1]) : end;}// Set the content type and attachment header.
//            String contentType = request.getServletContext().getMimeType(video.getFile().getAbsolutePath());response.setContentType("video/mp4");
//        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes " + start + "-" + end + "/" + fileLength);response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(end - start + 1));response.setStatus(206);
//            headers.setContentType(MediaType.parseMediaType(contentType));// Create resource that represents the part of the video file.try (RandomAccessFile raf = new RandomAccessFile(file, "r")){raf.seek(start);ServletOutputStream out = response.getOutputStream();byte[] bytes = new byte[4096];int r = 0;while (start<=end) {r = raf.read(bytes,0,(int)Math.min(bytes.length,end-start+1));if(r<=0){break;}start+=r;out.write(bytes,0,r);}} catch (Exception e) {throw new RuntimeException(e);}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63346.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

游戲AI實現-尋路算法(A*)

A*&#xff08;A-star&#xff09;是一種圖遍歷和尋路算法&#xff0c;由于其完整性、最優性和最佳效率&#xff0c;它被用于計算機科學的許多領域。給定一個加權圖、一個源節點和一個目標節點&#xff0c;該算法將找到從源到目標的最短路徑&#xff08;相對于給定的權重&#…

any/all 子查詢優化規則的原理與解析 | OceanBase查詢優化

背景 在通常情況下&#xff0c;當遇到包含any/all子查詢的語句時&#xff0c;往往需要遵循嵌套執行的方式&#xff0c;因此其查詢效率較低。Oceanbase中制定了相應的any/all子查詢優化規則&#xff0c;能夠能夠識別并優化符合條件的any/all子查詢&#xff0c;從而有效提升查詢…

[HNOI2002] 營業額統計 STL - set集合

文章目錄 [HNOI2002] 營業額統計題目描述樣例輸入 #1樣例輸出 #1 提示題解相關知識點set [HNOI2002] 營業額統計 STL - set解題 題目描述 Tiger 最近被公司升任為營業部經理&#xff0c;他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 Tiger 拿出…

汽車供應鏈 “劇變”開始,“智能感知潛在龍頭”誕生

智能汽車產業鏈“劇變”已經開啟&#xff0c;智能感知軟硬件能力的權重正在不斷被放大。 比如滿足高階泊車的第二代AK2超聲波傳感器、滿足人機共駕場景需求的電子外后視鏡&#xff08;CMS&#xff09;、iTOF 3D成像視覺感知&#xff08;用于艙內監控&#xff09;等新產品&…

Latex中表格添加底部文本注釋并調整對齊

如何實現從第一個表到第三個表的轉換&#xff0c; 其中主要涉及到兩點&#xff1a; &#xff08;1&#xff09;底部腳注與表格自動對齊并縮進換行 &#xff08;2&#xff09;表格自適應頁面寬度 底部腳注的對齊與換行縮進需要用到 \usepackage{threeparttable} \usepackage{…

SQL 查詢方式比較:子查詢與自連接

在 SQL 中&#xff0c;子查詢和自連接是兩種常見的查詢方式&#xff0c;它們的功能雖然可以相同&#xff0c;但實現的方式不同。本文通過具體示例&#xff0c;深入探討這兩種查詢方式&#xff0c;并配合數據展示&#xff0c;幫助大家理解它們的使用場景和差異。 數據示例 假設…

html基礎-認識html

1.什么是html html是瀏覽器可以識別的的標記語言&#xff0c;我們在瀏覽器瀏覽的網頁就是一個個的html文檔 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>認識html</title> </head> <body><h1…

linux 無網絡安裝mysql

下載地址 通過網盤分享的文件&#xff1a;mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz 鏈接: https://pan.baidu.com/s/1qm48pNfGYMqBGfoqT3hxPw?pwd0012 提取碼: 0012 安裝 解壓 tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv /usr/mysql-5.7.33-linux-glibc2.1…

利用高德API獲取整個城市的公交路線并可視化(七)

本篇文章是對我們從高德拿到的公交/地鐵的json文件的精細化處理的一個深入解析&#xff0c;通過對這些原始數據進行詳細的清洗、轉換和分析&#xff0c;我們通過對數據的質量和可用性的提升&#xff0c;來為后續的數據精細化處理和研究做基礎數據的支撐&#xff0c;從而為后續的…

OGV格式如何轉換成MP4格式?五款視頻格式轉換工具

在數字時代&#xff0c;視頻已成為我們日常生活、工作和學習中不可或缺的一部分。而不同的設備和平臺往往支持不同的視頻格式&#xff0c;這就需要對視頻進行格式轉換。 OGV&#xff08;Ogg Video File&#xff09;是一種使用OGG開源格式的容器&#xff0c;用于存儲帶或不帶音頻…

番外篇 | Hyper-YOLO:超圖計算與YOLO架構相結合成為目標檢測新的SOTA !

前言:Hello大家好,我是小哥談。Hyper-YOLO,該方法融合了超圖計算以捕捉視覺特征之間復雜的高階關聯。傳統的YOLO模型雖然功能強大,但其頸部設計存在局限性,限制了跨層特征的融合以及高階特征關系的利用。Hyper-YOLO在骨干和頸部的聯合增強下,成為一個突破性的架構。在COC…

C語言小練習-打印字母倒三角

編寫一個程序&#xff0c;在用戶輸入某個大寫字母后&#xff0c;產生一個金字塔圖案。 #include <stdio.h>int main(int argc,char *argv[]) {char ch; loop:printf("請輸入大寫字母&#xff01;\n");scanf("%c",&ch);getchar();if(ch < A ||…

FutureCompletableFuture實戰

1. Callable&Future&FutureTask介紹 直接繼承Thread或者實現Runnable接口都可以創建線程&#xff0c;但是這兩種方法都有一個問題就是&#xff1a;沒有返回值&#xff0c;也就是不能獲取執行完的結果。因此java1.5就提供了Callable接口來實現這一場景&#xff0c;而Fu…

什么是MyBatis

MyBatis是一款優秀的持久層框架&#xff0c;它支持定制化SQL、存儲過程以及高級映射。以下是關于MyBatis的詳細介紹&#xff1a; 一、MyBatis的起源與發展 MyBatis本是Apache的一個開源項目iBATIS&#xff0c;2010年這個項目由Apache遷移到了Google Code&#xff0c;并且改名…

阿爾茨海默癥數據集,使用yolo,voc,coco格式對2013張原始圖片進行標注,可識別輕微,中等和正常的癥狀

阿爾茨海默癥數據集,使用yolo&#xff0c;voc&#xff0c;coco格式對2013張原始圖片進行標注&#xff0c;可識別輕微&#xff0c;中等&#xff0c;嚴重和正常的癥狀 數據集分割 訓練組100&#xff05; 2013圖片 有效集&#xff05; 0圖片 測試集&#xf…

[代碼隨想錄21二叉樹]二叉樹的修改和改造,修剪二叉樹,將有序數組轉為二叉搜索樹

前言 二叉樹章節最后的題目了&#xff0c;就是對搜索二叉樹的改造&#xff0c; 題目鏈接 669. 修剪二叉搜索樹 - 力扣&#xff08;LeetCode&#xff09; 108. 將有序數組轉換為二叉搜索樹 - 力扣&#xff08;LeetCode&#xff09; 一、修剪二叉搜索樹 思路&#xff1a;等會…

Android 13 Aosp SystemServer功能裁剪(PackageManager.hasSystemFeature())

系統定制,裁剪Wifi,bt等模塊 UI部分可參考: SystemUI 隱藏下拉快捷面板部分模塊(wifi,bt,nfc等)入口 Android系統啟動后Zygote進程會forkSystemServer進程。SystemServer啟動Andorid服務. frameworks/base/services/java/com/android/server/SystemServer.java if (contex…

Scala的惰性求值:深入理解與實踐

在編程中&#xff0c;我們經常需要處理那些計算成本高昂或者可能永遠不會用到的值。在這種情況下&#xff0c;惰性求值&#xff08;Lazy Evaluation&#xff09;是一種非常有用的策略。它允許我們推遲計算&#xff0c;直到這些值真正需要被使用。Scala&#xff0c;作為一種多功…

事務-介紹與操作四大特性

一.數據準備&#xff1a; 1.員工表&#xff1a; -- 員工管理 create table tb_emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用戶名,password varchar(32) default 123456 comment 密碼,n…

Golang學習歷程【第一篇 入門】

Golang學習歷程【第一篇 入門Hello World】 1. 學習文檔2. Window 本地安裝Go2.1 安裝2.2 驗證 3. 開發環境——VsCode3.1 VsCode 安裝3.2 安裝插件3.2.1 language 語言漢化插件安裝3.2.2 Go插件安裝 4. Hello World 入門4.1 建工程4.2 創建項目文件4.3 編寫Hello World程序4.4…