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

SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載

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

SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載:
1,介紹高性能分布式存儲(chǔ)文件服務(wù)Minio:Minio是基于Go語(yǔ)言編寫(xiě)的對(duì)象存儲(chǔ)服務(wù),適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、音頻、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從幾kb到最大5T不等。區(qū)別于分布式存儲(chǔ)系統(tǒng),minio的特色在于簡(jiǎn)單、輕量級(jí),對(duì)開(kāi)發(fā)者友好?。?!,認(rèn)為存儲(chǔ)應(yīng)該是一個(gè)開(kāi)發(fā)問(wèn)題而不是一個(gè)運(yùn)維問(wèn)題。

Minio的高可用設(shè)計(jì)特性:

  • 分布式設(shè)計(jì)

1、Minio將多個(gè)硬盤(pán)(可以分布在不同機(jī)器)組成一個(gè)分布式的對(duì)象存儲(chǔ)系統(tǒng)
2、去中心化、分布式

  • 數(shù)據(jù)保護(hù)

1、Minio采用糾刪碼(erasuer code)來(lái)保證集群多點(diǎn)或者單點(diǎn)故障和位衰減(bit rot)
2、最少需要4個(gè)節(jié)點(diǎn)來(lái)使Minio自動(dòng)引入糾刪碼

  • 高可用

分布式Minio存儲(chǔ)系統(tǒng)允許集群N/2節(jié)點(diǎn)宕機(jī),但是恢復(fù)數(shù)據(jù)則需要通過(guò)N/2+1節(jié)點(diǎn)來(lái)進(jìn)行恢復(fù)。
例如:8個(gè)節(jié)點(diǎn),宕機(jī)4個(gè),則需要5個(gè)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)恢復(fù)

  • 限制

分布式Minio單個(gè)租戶(hù)最小需要4個(gè)節(jié)點(diǎn)(硬盤(pán)),最大支持16個(gè)節(jié)點(diǎn)(硬盤(pán))受限于糾刪碼(erasuer
code),我們可以使用k8s來(lái)進(jìn)行minio租戶(hù)的管理。

  • 一致性

Minio不論是分布式或者是單機(jī),均遵從read-after-write來(lái)保證數(shù)據(jù)的一致性

  • 安全

支持TLS證書(shū)

  • Minio糾刪碼

Minio使用糾刪碼(erasuer code) 進(jìn)行校驗(yàn)來(lái)保護(hù)數(shù)據(jù),
避免發(fā)生硬件故障或者某種原因?qū)е聰?shù)據(jù)丟失,即使丟失N/2 的硬盤(pán)都可以將數(shù)據(jù)恢復(fù)回來(lái)。

http://www.360doc.com/content/21/1004/21/25921839_998266807.shtml 通過(guò)這個(gè)鏈接了解糾刪碼

Minio如何使用糾刪碼及優(yōu)點(diǎn)

糾刪碼是一種數(shù)據(jù)丟失和損壞數(shù)據(jù)的一種算法,Minio使用Reed-Solomon
code拆分對(duì)象為N/2數(shù)據(jù)和N/2奇偶校驗(yàn)塊。
例如:我有12塊硬盤(pán),存放了一個(gè)文件,Minio會(huì)給我分成6份數(shù)據(jù)和6個(gè)奇偶校驗(yàn)塊,不管我是丟失了哪個(gè)硬盤(pán),數(shù)據(jù)均可以得到恢復(fù)。
.
Minio可以針對(duì)某個(gè)對(duì)象進(jìn)行單獨(dú)恢復(fù),而raid則需要針對(duì)卷來(lái)進(jìn)行恢復(fù),從而減少了恢復(fù)的時(shí)間周期。
Minio對(duì)每個(gè)對(duì)象進(jìn)行編碼,存儲(chǔ)服務(wù)一經(jīng)部署,存儲(chǔ)硬盤(pán)一般不需要進(jìn)行更換或者修復(fù),Minio的糾刪碼設(shè)計(jì)目標(biāo)是為了性能和硬件加速。

接下來(lái)單機(jī)版Docker部署Minio服務(wù):

通過(guò)配置docker-compose.yml文件管理容器,通過(guò)docker-compose up -d 啟動(dòng)容器

docker-compose.yml文件
這里的9100是配置訪問(wèn)minio自帶的web管理后臺(tái),9090是配置的服務(wù)器

version: "3.1"
services:
  minio:
    image: minio/minio:latest
    container_name: minio
    ports:
      - "9100:9000"
      - "9090:9090"
    volumes:
      - "./data:/data"
    environment:
      MINIO_ACCESS_KEY: "root"
      MINIO_SECRET_KEY: "12345678"
    command: server /data --console-address=":9000" --address=":9090"
    logging:
      driver: "json-file"
      options:
        max-size: "1m"

啟動(dòng)容器,訪問(wèn)web界面,如圖所示
SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載

SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載
.
.

minio服務(wù)搭建完畢之后,接下來(lái)就是用Springboot整合Minio實(shí)現(xiàn)文件的上傳、下載
項(xiàng)目練習(xí)源碼gitee地址:
https://gitee.com/xzq25_com/minio-test.git

項(xiàng)目目錄結(jié)構(gòu):
SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載

拉取以上項(xiàng)目源碼,簡(jiǎn)單總結(jié)一下需要干的事兒:

1,yml文件配置
2,minio配置類(lèi)并注入容器進(jìn)行管理
3,封裝minio操作服務(wù)器的API的工具類(lèi),項(xiàng)目中封裝了單文件上傳、下載、刪除、查看功能,桶的創(chuàng)建等
公司具體的存儲(chǔ)業(yè)務(wù),在次基礎(chǔ)上根據(jù)公司業(yè)務(wù)來(lái)自行擴(kuò)展
4,編寫(xiě)controller層,用postman進(jìn)行簡(jiǎn)單的測(cè)試(測(cè)試類(lèi)型:文本、文檔、表格、音頻、視頻、圖片)

yml配置

spring:
  # 配置文件上傳大小限制
  servlet:
    multipart:
      max-file-size: 200MB
      max-request-size: 200MB
minio:
  server: http://120.76.159.196
  port: 9090
  accessKey: root
  secretKey: 12345678
  bucket: test
  urlprefix: /minio/

配置類(lèi)截圖如下:

/**
 * @Author xiaozq
 * @Date 2022/11/17 9:54
 * <p>@Description: 注意:這里不能用@Data,需手動(dòng)寫(xiě)gitter,setter
 * reason:與@ConfigurationProperties一起用的時(shí)候,配置文件的值不能賦值給對(duì)應(yīng)類(lèi)屬性,屬性值均為null</p>
 */
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {

    private String server;

    private int port;

    private String accessKey;

    private String secretKey;

    // 桶名
    private String bucket;

    // 統(tǒng)一前綴
    private String urlPrefix;

    /**
     * 創(chuàng)建minio連接對(duì)象
     * @return
     */
    @Bean
    public MinioClient minioClient(){
        return  MinioClient.builder()
                           .endpoint(server,port,false)
                           .credentials(accessKey,secretKey)
                           .build();
    }

    public void setServer(String server) {
        this.server = server;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }

    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }

    public void setBucket(String bucket) {
        this.bucket = bucket;
    }


    public void setUrlPrefix(String urlPrefix) { this.urlPrefix = urlPrefix; }

    public String getUrlPrefix() {
        return urlPrefix;
    }

    public String getServer() {
        return server;
    }

    public int getPort() {
        return port;
    }

    public String getAccessKey() {
        return accessKey;
    }

    public String getSecretKey() {
        return secretKey;
    }

    public String getBucket() {
        return bucket;
    }
}

自定義封裝操作minio的api工具類(lèi)

**
 * @Author xiaozq
 * @Date 2022/8/5 10:42
 * <p>@Description:</p>
 */
@Component
public class MinioTemplate {

    @Autowired
    private MinioClient minioClient;

    @Value("${minio.bucket}")
    public String bucketName;

    @Value("${minio.urlprefix}")
    public String urlprefix;

    /**
     * 判斷bucket是否存在,不存在則創(chuàng)建
     * @param name
     */
    public void existBucket(String name){
        try {
            boolean exist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if(!exist){
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 創(chuàng)建存儲(chǔ)bucket
     * @param bucketName 存儲(chǔ)bucket名稱(chēng)
     * @return Boolean
     */
    public Boolean makeBucket(String bucketName) {
        try {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 刪除存儲(chǔ)bucket
     * @param bucketName 存儲(chǔ)bucket名稱(chēng)
     * @return Boolean
     */
    public Boolean removeBucket(String bucketName) {
        try {
            minioClient.removeBucket(RemoveBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 文件上傳
     * @param file
     * @return
     */
    public Map<String, String> upload(MultipartFile file) {

        String filename = FileUtils.extractUploadFilename(file);
        try {
            InputStream inputStream = file.getInputStream();
            // 上傳到minio服務(wù)器
            minioClient.putObject(PutObjectArgs.builder()
                    .bucket(this.bucketName)
                    .object(filename)
                    .stream(inputStream, -1L, 10485760L)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 返回地址
        Map<String,String > resultMap = new HashMap<>();
        resultMap.put("url",filename);
        return  resultMap;
    }

    /**
     * 文件下載
     * @param fileName 文件名
     * @param delete   是否刪除
     * @throws IOException
     */
    public void fileDownload(@RequestParam(name = "fileName") String fileName,
                             @RequestParam(defaultValue = "false") Boolean delete,
                             HttpServletResponse response) {

            InputStream inputStream   = null;
            OutputStream outputStream = null;
            try {
                if (StringUtils.isBlank(fileName)) {
                response.setHeader("Content-type", "text/html;charset=UTF-8");
                String data = "文件下載失敗";
                OutputStream ps = response.getOutputStream();
                ps.write(data.getBytes("UTF-8"));
                return;
            }

            outputStream = response.getOutputStream();
            // 獲取文件對(duì)象
            inputStream =minioClient.getObject(GetObjectArgs.builder().bucket(this.bucketName).object(fileName).build());
            byte buf[] = new byte[1024];
            int length = 0;
            response.reset();
            response.setHeader("Content-Disposition", "attachment;filename=" +
                    URLEncoder.encode(fileName.substring(fileName.lastIndexOf("/") + 1), "UTF-8"));
            response.setContentType("application/octet-stream");
            response.setCharacterEncoding("UTF-8");
            // 輸出文件
            while ((length = inputStream.read(buf)) > 0) {
                outputStream.write(buf, 0, length);
            }
            inputStream.close();
            // 判斷:下載后是否同時(shí)刪除minio上的存儲(chǔ)文件
            if (BooleanUtils.isTrue(delete)) {
                minioClient.removeObject(RemoveObjectArgs.builder().bucket(this.bucketName).object(fileName).build());
            }
        } catch (Throwable ex) {
            response.setHeader("Content-type", "text/html;charset=UTF-8");
            String data = "文件下載失敗";
            try {
                OutputStream ps = response.getOutputStream();
                ps.write(data.getBytes("UTF-8"));
            }catch (IOException e){
                e.printStackTrace();
            }
        } finally {
            try {
            outputStream.close();
            if (inputStream != null) {
                    inputStream.close();
                }}catch (IOException e){
                e.printStackTrace();
            }
        }
    }


    /**
     * 查看文件對(duì)象
     * @param bucketName 存儲(chǔ)bucket名稱(chēng)
     * @return 存儲(chǔ)bucket內(nèi)文件對(duì)象信息
     */
    public List<ObjectItem> listObjects(String bucketName) {
        Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
        List<ObjectItem> objectItems = new ArrayList<>();
        try {
            for (Result<Item> result : results) {
                Item item = result.get();

                ObjectItem objectItem = new ObjectItem();
                objectItem.setObjectName(item.objectName());
                objectItem.setSize(item.size());

                objectItems.add(objectItem);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return objectItems;
    }

    /**
     * 批量刪除文件對(duì)象
     * @param bucketName 存儲(chǔ)bucket名稱(chēng)
     * @param objects 對(duì)象名稱(chēng)集合
     */
    public Map<String, String> removeObjects(String bucketName, List<String> objects) {
        Map<String,String > resultMap = new HashMap<>();
        List<DeleteObject> dos = objects.stream().map(e -> new DeleteObject(e)).collect(Collectors.toList());
        try {
             minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build());
            resultMap.put("mes","刪除成功");
        }catch (Exception e){
            e.printStackTrace();
            resultMap.put("mes","網(wǎng)絡(luò)異常,刪除失敗");
        }
        return resultMap;
    }

}

上傳文件名替換工具類(lèi):

public class FileUtils {

    /**
     * 編碼文件名
     * 日期路徑 + UUID
     * 示例:fileName=2022/11/18/統(tǒng)計(jì)報(bào)表1668758006562.txt
     */
    public static final String extractUploadFilename(MultipartFile file)
    {
        String fileName = file.getOriginalFilename();
        // 注意,這里需要加上 \\ 將 特殊字符 . 轉(zhuǎn)意 \\. ,否則異常
        String[] fileArray = fileName.split("\\.");
        fileName = datePath() + "/" + fileArray[0]+System.currentTimeMillis()+"."+fileArray[1];
        return fileName;
    }

    /**
     * 日期路徑 即年/月/日 如2018/08/08
     */
    public static final String datePath() {
        Date now = new Date();
        return DateFormatUtils.format(now, "yyyy/MM/dd");
    }
}

controller層測(cè)試

@RestController
public class MinioController {

    @Autowired
    private MinioTemplate minioTemplate;

    @Value("${minio.server}")
    private String server;

    @Value("${minio.port}")
    private Integer port;

    @Value("${minio.bucket}")
    private String bucket;


    /**
     * 單文件上傳
     * @param file 文件
     * @return
     */
    @PostMapping("/uploadone")
    public Object uploadOne(MultipartFile file) {
        return minioTemplate.upload(file);
    }

    /**
     *  單文件下載
     * @param fileName 文件
     * @param delete 下載完后是否刪除, 請(qǐng)謹(jǐn)慎傳參
     */
    @GetMapping("/download")
    public void download(@RequestParam(value = "fileName") String fileName,
                         @RequestParam(defaultValue = "false")Boolean delete, HttpServletResponse response) {
        minioTemplate.fileDownload(fileName,delete,response);
    }

    /**
     * 查看存儲(chǔ)的文件列表
     * @param bucket 桶
     * @return
     */
    @GetMapping("/list")
    public  Object fileList(@RequestParam(value = "bucket") String bucket) {
        return minioTemplate.listObjects(bucket);
    }

    /**
     * 刪除文件
     * @param bucket 桶
     * @param list 文件名列表
     * @return
     */
    @DeleteMapping ("/remove")
    public  Object fileremove(@RequestParam String bucket,@RequestParam List<String> list) {
        return minioTemplate.removeObjects(bucket,list);
    }

}

.

接下來(lái)就是用postman測(cè)試,非常便利:測(cè)試存儲(chǔ)文檔、表格、日志、視頻、音頻、圖片等上傳、下載
SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載
.

好啦,Minio的入門(mén)學(xué)習(xí)就到此結(jié)束啦,希望能給你帶來(lái)幫助…文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455984.html

到了這里,關(guān)于SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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整合Hutool實(shí)現(xiàn)文件上傳下載

    我相信我們?cè)谌粘i_(kāi)發(fā)中,難免會(huì)遇到對(duì)各種媒體文件的操作,由于業(yè)務(wù)需求的不同對(duì)文件操作的代碼實(shí)現(xiàn)也大不相同 maven配置 文件類(lèi) 文件接口? 配置靜態(tài)資源映射

    2024年02月02日
    瀏覽(26)
  • SpringBoot整合minio實(shí)現(xiàn)斷點(diǎn)續(xù)傳、分片上傳(附源碼)

    SpringBoot整合minio實(shí)現(xiàn)斷點(diǎn)續(xù)傳、分片上傳(附源碼)

    在Web開(kāi)發(fā)中,大文件的上傳是必不可少的功能之一。本文將介紹如何使用SpringBoot整合minio實(shí)現(xiàn)一個(gè)簡(jiǎn)單的大文件上傳網(wǎng)站。 項(xiàng)目下載 gitee:https://gitee.com/wusupweilgy/springboot-vue.git 前端:vue2、element-ui組件、axios 后端:springboot、minio、mybatis-plus、redis 斷點(diǎn)續(xù)傳 分片上傳 前端顯示

    2024年02月04日
    瀏覽(25)
  • SpringBoot整合hdfs,實(shí)現(xiàn)文件上傳下載刪除與批量刪除,以及vue前端發(fā)送請(qǐng)求,實(shí)現(xiàn)前后端交互功能;

    SpringBoot整合hdfs,實(shí)現(xiàn)文件上傳下載刪除與批量刪除,以及vue前端發(fā)送請(qǐng)求,實(shí)現(xiàn)前后端交互功能;

    部分工具類(lèi)代碼參考文章:https://blog.csdn.net/qq_27242695/article/details/119683823 前端實(shí)現(xiàn)效果 HDFSController HDFS FileInterface (文件接口) HDFS FileImplService (文件接口實(shí)現(xiàn)類(lèi)) HDFSConfig(從yaml讀取文件) HDFSUTils 前端vue代碼:

    2024年02月16日
    瀏覽(130)
  • springboot實(shí)現(xiàn)minio文件分片上傳

    在Spring Boot中實(shí)現(xiàn)MinIO的文件分片上傳涉及到幾個(gè)關(guān)鍵步驟。MinIO是一個(gè)高性能的分布式對(duì)象存儲(chǔ)服務(wù),它兼容Amazon S3的API。分片上傳主要用于上傳大文件,將大文件分成多個(gè)部分,分別上傳,最后再將這些部分合并成一個(gè)完整的文件。這樣做的好處是提高了上傳的可靠性,并

    2024年01月17日
    瀏覽(24)
  • springboot實(shí)現(xiàn)文件上傳到minio

    一、前言 最近在項(xiàng)目中用的使用minio來(lái)上傳文件,因此在這里給告訴大家如何實(shí)現(xiàn) 二、實(shí)現(xiàn)文件上傳至minio 1.添加相關(guān)的maven依賴(lài) 2.minio連接配置 (1)首先配置minio屬性 (2)接著配置minio連接,代碼如下: (3)在YAML添加minio配置 3.定義minio工具類(lèi),代碼如下: 4.編寫(xiě)實(shí)現(xiàn)文件

    2024年02月09日
    瀏覽(27)
  • 【分布式文件存儲(chǔ)】MinIO部署及實(shí)現(xiàn)文件上傳下載

    【分布式文件存儲(chǔ)】MinIO部署及實(shí)現(xiàn)文件上傳下載

    目錄 概述 MinIO集群部署 準(zhǔn)備docker-compose.yml 測(cè)試啟動(dòng) MinIO用戶(hù)管理 Buckets管理 ?創(chuàng)建Buckets MinIO客戶(hù)端 引入依賴(lài)? ?文件上傳下載Demo 調(diào)用API碰到的問(wèn)題 MinIO | 高性能, Kubernetes 原生對(duì)象存儲(chǔ) MinIO是全球領(lǐng)先的對(duì)象存儲(chǔ)先鋒,目前在全世界有數(shù)百萬(wàn)的用戶(hù)。 高性能 ,在標(biāo)準(zhǔn)硬件

    2024年02月07日
    瀏覽(30)
  • Java實(shí)現(xiàn)minio上傳、下載、刪除文件,支持https訪問(wèn)

    Java實(shí)現(xiàn)minio上傳、下載、刪除文件,支持https訪問(wèn)

    MinIO 是一款高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng),Minio是基于Go語(yǔ)言編寫(xiě)的對(duì)象存儲(chǔ)服務(wù),適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、音頻、視頻、備份數(shù)據(jù)等 , 傳統(tǒng)對(duì)象存儲(chǔ)用例(例如輔助存儲(chǔ),災(zāi)難恢復(fù)和歸檔)方面表現(xiàn)出色。 導(dǎo)入minio依賴(lài)包 application.yml配置文件 配置

    2024年02月05日
    瀏覽(26)
  • minio + linux + docker + spring boot實(shí)現(xiàn)文件上傳與下載

    minio + linux + docker + spring boot實(shí)現(xiàn)文件上傳與下載

    檢查linux內(nèi)核,必須是3.10以上 安裝docker 啟動(dòng)docker 搜索鏡像 拉取鏡像 啟動(dòng)minio -p: 指定端口映射,格式為:主機(jī)端口:容器端口 (這里注意要映射兩個(gè),否則API會(huì)訪問(wèn)不到) -e “MINIO_ROOT_USER=vinci” minio用戶(hù)名; -e MINIO_SECRET_KEY=123456 minio 密碼 -d: 后臺(tái)運(yùn)行容器,并返回容器ID; -

    2024年02月07日
    瀏覽(27)
  • MINIO服務(wù)器基于AWS S3 SDK 文件分片上傳及下載(C++實(shí)現(xiàn))

    MINIO服務(wù)器基于AWS S3 SDK 文件分片上傳及下載(C++實(shí)現(xiàn))

    安裝環(huán)境依賴(lài): 獲取SDK源碼并安裝: 項(xiàng)目中CMakeLists.txt配置: SDK文檔資料 C++_SDK.pdf 實(shí)現(xiàn)下載的整體類(lèi)代碼下載 具體內(nèi)容如下

    2024年04月10日
    瀏覽(50)
  • 上傳視頻文件,基于斷點(diǎn)續(xù)傳(整合Minio)

    上傳視頻文件,基于斷點(diǎn)續(xù)傳(整合Minio)

    目錄 1、什么是斷點(diǎn)續(xù)傳 2、分塊文件 3、合并文件 4、?Minio 分布式文件系統(tǒng)整合斷點(diǎn)續(xù)傳 4.1 進(jìn)行文件分塊上傳到 Minio? 4.2 進(jìn)行 Minio 中分塊文件的合并 5、使用 Minio 進(jìn)行斷點(diǎn)續(xù)傳的注意事項(xiàng) ? ????????相信很多小伙伴在上傳下載圖片或者視頻的時(shí)候,突然間(沒(méi)錯(cuò)就是這

    2024年02月11日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包