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

springboot 本地/minio 附件下載優(yōu)化

這篇具有很好參考價值的文章主要介紹了springboot 本地/minio 附件下載優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

  1. 本地上傳大文件內存溢出 Direct buffer memory
  2. 附件下載服務端傳流給前端需要將流緩存完畢才可以下載,導致大文件下載系統(tǒng)崩潰

一、Direct buffer memory

后端服務采用nio本地上傳到服務器指定目錄,通過nginx代理提供下載

1.1 原因分析

Java8出現(xiàn)了NIO,緩存,通道,選擇器。在 寫NIO程序的時候,經常使用ByteBuffer來讀或者寫入數據,這是一種基于通道(
Channel)與緩沖區(qū)( Buffer)的I/0方式.它可以使用 Native函數庫直接分配堆外內存,然后通過一個存做在Java里面的
DirectByteBuffer對作為這塊內存的引用進行操作??梢蕴岣咝阅?因為避免了在Java堆和 Native堆中來回復制數據。
ByteBuffer. allocate(capability)第一種方式是分配java堆內存,屬于GC管理范圍,由于需要進行拷貝,所以比較慢。
ByteBuffer. allocteDirect (capability)第一種方式是分配操作系統(tǒng)的本地內存,不屬于GC管轄范圍,由于不需要內存拷貝所以速度相對較快。但如果不斷分配本地內存,堆內存很少使用,那么java虛擬機就不需要進行GC,
DirectByteBuffer對象們就不會被回收,這個時候堆內存充足,但本地內存可能已經使用光了,在嘗試分配本地內存就會出0ut0fMemory
Error,那程序就直接奔潰了。

linux 清理內存命令echo 1 > /proc/sys/vm/drop_caches

1.2 解決方案

拋棄nio,特別是對大數據流場景,這里改用普通io操作數據流(后續(xù)引發(fā)問題分析)

二、附件下載

2.1 問題分析

告別Direct buffer memory的后續(xù)問題
無論是本地下載還是minio下載都存在一個隱形問題。
前端blog請求后,要等服務端將整個附件流傳輸完畢后才可以下載,對大文件(600M)不友好,大概率卡死。
F12 可以看到接口響應的大小一直在上升,直到整個文件傳輸完畢瀏覽器才會響應。
springboot 本地/minio 附件下載優(yōu)化
我們可以看到互聯(lián)網下載都是在瀏覽器下載管理器下載,那么我們如何實現(xiàn)?
springboot 本地/minio 附件下載優(yōu)化
實際上本地下載我們通過nginx代理后的地址可以直接訪問文件地址進行下載,滿足上述要求。但是這樣的操作會導致附件下載繞過后端直接請求,無法防止盜鏈。minio上傳無法通過nginx實現(xiàn)(不考慮下載到服務器nginx代理,這樣不合理)。

2.2 解決方案

2.2.1 本地下載

nginx + 重定向X-Accel-Redirect
這個功能允許你在后端處理權限,日志或任何你想干的,Nginx提供內容服務給終端用戶從重定向后的路徑,因此可以釋放后端去處理其他請求(直接由Nginx提供IO,而不是后端服務)。這個功能類似 X-Sendfile 。

具體步驟篇幅太長請移步鏈接

2.2.1 minio下載

  1. minio管理界面可以截取到下載路徑,模擬他的下載即可

  2. 連接地址發(fā)現(xiàn)需要傳入minio的登錄token,下一步想辦法獲取token

  3. 高版本支持多用戶,可創(chuàng)建臨時用戶獲取token(8.4.3)

  4. 高版本管理界面下載路徑變了,【minio ip port】+/api/v1/buckets/+【bucket】+/objects/download?prefix=【Base64.*encode(附件路徑)】+\&token=* + *token*

  5. 直接訪問上一步的url即可下載

    https://github.com/minio/minio-java/tree/release/examples

    public Credentials getCredentials() {
        int durationSeconds = 360000;//秒
        //創(chuàng)建簽名對象
        AssumeRoleProvider provider = new AssumeRoleProvider(
                properties.getUrl(),
                properties.getAccessKey(),
                properties.getSecretKey(),
                durationSeconds,//默認3600秒失效,設置小于這個就是3600,大于3600就實際值
                "{\n" +
                        " \"Version\": \"2012-10-17\",\n" +
                        " \"Statement\": [\n" +
                        "  {\n" +
                        "   \"Effect\": \"Allow\",\n" +
                        "   \"Action\": [\n" +
                        "    \"s3:GetObject\",\n" +
                        "    \"s3:GetBucketLocation\",\n" +
                        "    \"s3:PutObject\"\n" +
                        "   ],\n" +
                        "   \"Resource\": [\n" +
                        "    \"arn:aws:s3:::test/*\"\n" +
                        "   ]\n" +
                        "  }\n" +
                        " ]\n" +
                        "}",
                properties.getRegion(),
                "arn:aws:s3:::*/*",
                "anysession",
                null,
                null);
        
        Credentials credentials = provider.fetch();
        return credentials;
    }
    public String downloadByLink(HttpServletRequest request, HttpServletResponse response, String fileId) {
        AttachmentPO po = attachmentService.findById(fileId);
        Credentials credentials = minioTemplate.getCredentials();
        String token = credentials.sessionToken();
        //為了統(tǒng)一前端訪問路徑,直接查客戶端請求Referer minio是前端ng代理的minio實際訪問
        String referer = request.getHeader("Referer");
        String url = referer + "minio/api/v1/buckets/" + po.getClientId() + "/objects/download?prefix=" + Base64.encode(po.getPath()) + "&token=" + token;
        return url;
    }

springboot 本地/minio 附件下載優(yōu)化文章來源地址http://www.zghlxwxcb.cn/news/detail-468665.html

到了這里,關于springboot 本地/minio 附件下載優(yōu)化的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SpringBoot+MinIO 實現(xiàn)文件上傳、讀取、下載、刪除

    一、 MinIO 二、 MinIO安裝和啟動 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 編寫Java業(yè)務類

    2024年02月09日
    瀏覽(43)
  • SpringBoot整合minio,文件的上傳下載,批量獲取

    Minio是GlusterFS創(chuàng)始人之一Anand Babu Periasamy發(fā)布新的開源項目?;贏pache License v2.0開源協(xié)議的對象存儲項目,采用Golang實現(xiàn),客戶端支Java,Python,Javacript, Golang語言。 其設計的主要目標是作為私有云對象存儲的標準方案。主要用于存儲海量的圖片,視頻,文檔等。非常適合于存儲

    2024年02月12日
    瀏覽(30)
  • 【Java】對Minio指定Bucket大量文件的批量下載與本地文件夾的批量上傳

    【Java】對Minio指定Bucket大量文件的批量下載與本地文件夾的批量上傳

    需要批量下載一個bucket下的內容,bucket下文件有19GB+,且文件夾結構復雜,使用官方的Console無法完成這么大量文件的下載,而且也不支持文件夾的分享,所以自己寫個工具下載,順便把上傳的也寫了。 使用官方的打包下載,由于文件太多,一直轉,而且session一失效,或者刷

    2024年02月09日
    瀏覽(37)
  • Springboot+Minio通過分片下載解決IOS下H5無法播放視頻問題

    一、環(huán)境說明 JDK 1.8 Springboot 2.7.5 Minio 8.4.5 Vue3實現(xiàn)的微信公眾號網頁 二、問題描述 當前項目是基于springboot和vue3的前后端分離架構,前端目前主要是基于H5展示在微信公眾號的網頁中。在實現(xiàn)視頻上傳、在線播放時遇到問題:前端同事說蘋果手機播放不了視頻,剛開始是統(tǒng)一

    2024年02月11日
    瀏覽(47)
  • C# MVC controller 上傳附件及下載附件(筆記)

    描述:Microsoft.AspNetCore.Http.IFormFileCollection 實現(xiàn)附件快速上傳功能代碼。 上傳附件代碼 upLoadFile Model類定義 附件下載代碼:

    2024年02月13日
    瀏覽(21)
  • 附件展示 點擊下載

    附件展示 點擊下載

    效果圖? ?實現(xiàn)代碼

    2024年02月14日
    瀏覽(39)
  • AbstractHttpMessageConverter + easyexcell優(yōu)雅下載附件

    AbstractHttpMessageConverter + easyexcell優(yōu)雅下載附件

    AbstractHttpMessageConverter 是 Spring 框架中用于處理 HTTP 消息轉換的抽象基類。它用于處理來自 HTTP 請求的消息,并將其轉換為特定的 Java 對象,或者將 Java 對象轉換為 HTTP 響應消息。 這個抽象類允許開發(fā)人員創(chuàng)建自定義的 HTTP 消息轉換器,以便在 Spring MVC 或 Spring WebFlux 應用程序

    2024年01月20日
    瀏覽(20)
  • 小程序附件下載并預覽功能

    一、實現(xiàn)的功能: 1、word、excel、圖片等實現(xiàn)下載并預覽 2、打開文件后顯示文件名稱 二、代碼:

    2024年02月15日
    瀏覽(15)
  • Spring Boot學習隨筆- 文件上傳和下載(在線打開、附件下載、MultipartFile)

    Spring Boot學習隨筆- 文件上傳和下載(在線打開、附件下載、MultipartFile)

    學習視頻:【編程不良人】2021年SpringBoot最新最全教程 文件上傳是指將文件從客戶端計算機傳輸到服務器的過程。 上傳思路 前端的上傳頁面:提交方式必須為 post , enctype 屬性必須為 multipart/form-data 開發(fā)后端的Controller 后端方法接收參數必須和前端標簽的name名一致 upload.js

    2024年02月04日
    瀏覽(51)
  • 大文件下載優(yōu)化方案(nginx+Springboot+vue)---非常完美

    1、背景: 系統(tǒng)中有個文件下載的功能,下載的文件從1k-幾十G不等,小文件下載沒有問題,只要上G了,下載大概率失敗?;谝陨犀F(xiàn)狀,對技術方案記性優(yōu)化。 2、歷史方案: 2.1 服務器讀取文件流傳輸+前端blob接收 描述: 后端接口通過response的IO通道,讀寫文件流傳輸 前端

    2024年02月16日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包