当前位置: 首页 > news >正文

SpringBoot+Minio实现多文件下载和批量下载

文章目录

    • SpringBoot+minio实现多文件下载
      • 1、SpringBoot+minio实现多文件打成一个压缩包下载
        • 1. 添加依赖
        • 2. 配置 MinIO 客户端
        • 3. 创建下载和压缩逻辑
        • 4. 创建控制器方法来触发下载
        • 5. 测试下载功能
        • 注意事项
      • 2、在minio指定的桶名下面生产一个文件夹
        • 1. MinIO 配置
        • 2. 编写业务逻辑
          • 文件夹操作和压缩下载
        • 3. 创建控制器
        • 4. 测试
        • 注意事项
      • 3、在minio指定的桶名下面生产一个临时文件夹
        • 1. 配置 MinIO 客户端
        • 2. 创建数据库实体类
        • 3. 创建存储库接口
        • 4. MinIO 服务实现
        • 5. 控制器实现
        • 6. 测试接口
        • 注意事项
      • 4、直接在内存中打包再上传
        • 1. MinIO 配置
        • 2. 创建数据库实体类
        • 3. 创建存储库接口
        • 4. 编写服务逻辑
        • 5. 创建控制器
        • 6. 测试接口
        • 注意事项
      • 5、本地生产一个临时目录进行打包再上传
        • 具体步骤如下:
        • 1. 使用系统临时目录
        • 示例代码
        • 2. 应用程序的特定临时目录
        • 3. 清理策略
        • 4. 权限和安全性
        • 5. 例子
        • 本地临时目录总结
        • 6. 添加依赖
        • 2. MinioService 实现
        • 3. 创建控制器
        • 4. 测试接口
        • 总结
      • 6、通过多线程将下载的文件合成在一个zip包中
        • 1. 添加依赖
        • 2. 创建 MinioService 类
        • 3. 创建控制器
        • 4. 测试接口
        • 注意事项
        • 总结
    • SpringBoot+minio实现文件批量下载
      • 1、for循环
        • 1. 准备工作
        • 2. 添加依赖
        • 3. 配置MinIO
        • 4. 创建MinIO配置类
        • 5. 创建下载控制器
        • 6. 测试下载功能
        • 7. 额外的压缩功能
        • 8. 安全性
        • 示例:压缩文件下载
        • 总结
      • 2、多线程
        • 1. 添加依赖
        • 2. 创建MinIO配置类
        • 3. 创建下载控制器
        • 4. 关键点解析
        • 5. 测试下载功能
        • 6. 性能优化
        • 7. 安全性
        • 总结
      • 3、多线程
        • 步骤概述
        • 1. 添加依赖
        • 2. 创建 MinioService 类
        • 3. 创建控制器
        • 4. 测试接口
        • 注意事项
        • 总结
    • 注意:提示没有transferTo(zipOut)这个方法
      • 解释
    • 运用

SpringBoot+minio实现多文件下载

1、SpringBoot+minio实现多文件打成一个压缩包下载

要在 Spring Boot 中使用 MinIO 实现多文件打包成一个压缩文件并下载,主要分为以下几个步骤:

  1. 连接 MinIO:创建 MinIO 客户端,用于与 MinIO 进行通信。
  2. 文件读取:从 MinIO 中读取多个文件。
  3. 文件压缩:将文件压缩为 ZIP 格式。
  4. 文件下载:将生成的 ZIP 文件流返回给客户端。
1. 添加依赖

如果还没有添加 MinIO 依赖,可以手动下载 MinIO 客户端库,或者直接用 Maven 来管理依赖:

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.5</version>
</dependency>
2. 配置 MinIO 客户端

application.properties 中添加 MinIO 配置:

minio.url=http://localhost:9000
minio.accessKey=your-access-key
minio.secretKey=your-secret-key
minio.bucketName=your-bucket

然后在 @Configuration 类中配置 MinIO 客户端:

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.url}")private String url;@Value("${minio.accessKey}")private String accessKey;@Value("${minio.secretKey}")private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}
}
3. 创建下载和压缩逻辑

在服务类中添加下载和压缩方法,以下代码会将指定的文件列表压缩成一个 ZIP 并返回给客户端。

import io.minio.GetObjectArgs;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;public void downloadFilesAsZip(List<String> fileNames, HttpServletResponse response) {try {// 设置响应头,文件名为 download.zipresponse.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=download.zip");// 创建 ZIP 输出流try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {for (String fileName : fileNames) {// 获取每个文件的输入流try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build())) {// 创建 ZIP 文件条目zipOut.putNextEntry(new ZipEntry(fileName));// 将文件数据写入 ZIPbyte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer)) >= 0) {zipOut.write(buffer, 0, length);}zipOut.closeEntry();  // 结束该条目的写入}}zipOut.finish();  // 完成 ZIP 文件}} catch (Exception e) {throw new RuntimeException("Error occurred while downloading files as zip", e);}}
}
4. 创建控制器方法来触发下载

在控制器中定义一个方法,接收前端的请求并调用服务类进行压缩与下载。

@RestController
public class FileDownloadController {@Autowiredprivate MinioService minioService;@GetMapping("/download-zip")public void downloadZip(@RequestParam List<String> fileNames, HttpServletResponse response) {minioService.downloadFilesAsZip(fileNames, response);}
}
5. 测试下载功能

现在可以通过 HTTP GET 请求测试该功能:

GET http://localhost:8080/download-zip?fileNames=file1.txt&fileNames=file2.jpg&fileNames=file3.pdf
注意事项
  • 内存消耗:如果文件较多或较大,生成 ZIP 文件的过程可能会占用大量内存。可以优化为逐个文件流写入 ZIP,避免内存问题。
  • 异常处理:可扩展异常处理,捕获 MinIO 连接失败、文件不存在等情况,并返回更详细的错误信息。

这个实现将从 MinIO 读取文件流,逐一压缩到 ZIP 中,并通过 HTTP 响应流返回给客户端。


2、在minio指定的桶名下面生产一个文件夹

SpringBoot+minio实现多文件下载时在minio指定的桶名下面生产一个文件夹,将需要下载放到这个文件夹中,并把这个文件夹打成一个压缩包后进行下载,下载成功后删除这个文件夹

在使用 Spring Boot 和 MinIO 实现上述功能时,可以按以下步骤操作:

  1. 创建 MinIO 文件夹:在 MinIO 指定的桶内创建一个文件夹。
  2. 上传文件到文件夹:将需要下载的文件复制到该文件夹。
  3. 打包文件夹为 ZIP 并下载:将文件夹内的文件打包为 ZIP 文件并返回给客户端。
  4. 清理文件夹:下载成功后,删除 MinIO 上的文件夹及其内容。

以下是实现的详细步骤和代码。

1. MinIO 配置

确保 MinIO 客户端配置正确。使用 application.properties 配置 MinIO 相关信息。

minio.url=http://localhost:9000
minio.accessKey=your-access-key
minio.secretKey=your-secret-key
minio.bucketName=your-bucket

并创建 MinIO 客户端配置类:

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.url}")private String url;@Value("${minio.accessKey}")private String accessKey;@Value("${minio.secretKey}")private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}
}
2. 编写业务逻辑

在服务类中添加方法来实现各步骤。

文件夹操作和压缩下载
import io.minio.CopyObjectArgs;
import io.minio.MinioClient;
import io.minio.RemoveObjectArgs;
import io.minio.GetObjectArgs;
import io.minio.ObjectWriteResponse;
import io.minio.UploadObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;// 将需要下载的文件放入临时文件夹并压缩下载public void downloadFolderAsZip(List<String> fileNames, HttpServletResponse response) {String tempFolderName = "temp-folder-" + UUID.randomUUID();  // 随机生成临时文件夹名称try {// 上传文件到临时文件夹for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;// 复制原始文件到临时文件夹minioClient.copyObject(CopyObjectArgs.builder().bucket(bucketName).object(objectName).source(bucketName + "/" + fileName).build());}// 设置响应头response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=download.zip");// 创建 ZIP 输出流try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;// 获取临时文件夹中的每个文件流try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build())) {// 写入 ZIP 条目zipOut.putNextEntry(new ZipEntry(fileName));byte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer)) >= 0) {zipOut.write(buffer, 0, length);}zipOut.closeEntry();  // 结束条目写入}}zipOut.finish();  // 完成 ZIP 文件}// 下载完成后删除临时文件夹deleteFolder(tempFolderName);} catch (Exception e) {throw new RuntimeException("Error occurred while downloading folder as zip", e);}}// 删除指定文件夹及其内容private void deleteFolder(String folderName) {try {Iterable<Result<Item>> items = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(folderName + "/").recursive(true).build());for (Result<Item> itemResult : items) {Item item = itemResult.get();minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(item.objectName()).build());}} catch (Exception e) {throw new RuntimeException("Error occurred while deleting folder", e);}}
}
3. 创建控制器

控制器方法用于接受文件名列表并调用服务中的方法进行下载。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.util.List;@RestController
public class FileDownloadController {@Autowiredprivate MinioService minioService;@GetMapping("/download-zip")public void downloadZip(@RequestParam List<String> fileNames, HttpServletResponse response) {minioService.downloadFolderAsZip(fileNames, response);}
}
4. 测试

可以通过以下 GET 请求测试功能:

GET http://localhost:8080/download-zip?fileNames=file1.txt&fileNames=file2.jpg&fileNames=file3.pdf
注意事项
  • 异步清理:如果文件数量多或者体积大,删除文件夹可能会影响性能。可以考虑将删除操作异步处理。
  • 异常处理:添加异常处理逻辑,确保在复制、压缩、删除等环节处理各种可能的错误。

3、在minio指定的桶名下面生产一个临时文件夹

SpringBoot+minio实现多文件下载时在minio指定的桶名下面生产一个文件夹,将需要下载放到这个文件夹中,并把这个文件夹打成一个压缩包后进行下载,下载成功后保留压缩包信息存放到数据库并且删除这个文件夹

要实现此功能,需要将多个文件上传到一个临时文件夹,并将该文件夹压缩为一个 ZIP 文件,供客户端下载。在下载成功后,将压缩包信息存储到数据库,并删除临时文件夹的所有文件。

以下是实现步骤和代码:

  1. 创建 MinIO 文件夹:在 MinIO 的指定桶下创建一个临时文件夹,并将文件复制到该文件夹中。
  2. 打包下载:将文件夹打包为 ZIP 文件返回给客户端。
  3. 保存记录:将 ZIP 文件信息存储到数据库中。
  4. 清理临时文件夹:下载完成后,删除临时文件夹中的所有文件,但保留 ZIP 文件。
1. 配置 MinIO 客户端

application.properties 中添加 MinIO 和数据库的配置:

# MinIO 配置
minio.url=http://localhost:9000
minio.accessKey=your-access-key
minio.secretKey=your-secret-key
minio.bucketName=your-bucket# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/yourdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
2. 创建数据库实体类

创建一个实体类 ZipFileRecord 来保存压缩包信息:

import javax.persistence.*;
import java.time.LocalDateTime;@Entity
public class ZipFileRecord {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String fileName;private String filePath;private LocalDateTime createdTime;// Getters and Setters// ...
}
3. 创建存储库接口

创建一个 ZipFileRecordRepository,用于保存压缩包信息:

import org.springframework.data.jpa.repository.JpaRepository;public interface ZipFileRecordRepository extends JpaRepository<ZipFileRecord, Long> {
}
4. MinIO 服务实现

编写服务类 MinioService,完成文件夹创建、文件复制、打包下载、数据库保存和清理的逻辑。

import io.minio.*;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Autowiredprivate ZipFileRecordRepository zipFileRecordRepository;@Value("${minio.bucketName}")private String bucketName;public void downloadFolderAsZip(List<String> fileNames, HttpServletResponse response) {String tempFolderName = "temp-folder-" + UUID.randomUUID();  // 创建临时文件夹String zipFileName = "download-" + UUID.randomUUID() + ".zip";String zipFilePath = tempFolderName + "/" + zipFileName;try {// 复制文件到临时文件夹for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;minioClient.copyObject(CopyObjectArgs.builder().bucket(bucketName).object(objectName).source(bucketName + "/" + fileName).build());}// 设置响应头,下载压缩包response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=" + zipFileName);// 创建 ZIP 输出流try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {for (String fileName : fileNames) {String objectName = tempFolderName + "/" + fileName;// 获取每个文件的输入流try (InputStream inputStream = minioClient.getObject(GetObjectArgs.

相关文章:

SpringBoot+Minio实现多文件下载和批量下载

文章目录 SpringBoot+minio实现多文件下载1、SpringBoot+minio实现多文件打成一个压缩包下载1. 添加依赖2. 配置 MinIO 客户端3. 创建下载和压缩逻辑4. 创建控制器方法来触发下载5. 测试下载功能注意事项2、在minio指定的桶名下面生产一个文件夹1. MinIO 配置2. 编写业务逻辑文…...

3.swoole安装【Docker】

一、拉取最新 swoole 镜像 docker pull phpswoole/swoole二、第一次启动swoole容器 docker run --name swoole phpswoole/swoole 三、 拷贝配置文件 docker cp swoole:/var/www /docker/swoole四、 停止 swoole 容器 dcoker stop swoole五、 删除第一次启动的swoole容器 d…...

React 探秘(三): 时间切片

文章目录 背景时间切片原理requestIderCallback 方法setImmediateMessageChannelsetTimeout React 18 时间切片源码手撸时间切片问题拆解构建任务队列宏任务包装首次开启任务递归任务执行workLoop 开启工作循环demo 模拟 总结 背景 前文学习了 fiber 架构和双缓存技术&#xff…...

OSError: Can‘t load tokenizer for ‘bert-base-uncased‘.

一、具体报错&#xff1a; 报错如下&#xff1a; OSError: Cant load tokenizer for bert-base-uncased. If you were trying to load it from https://huggingface.co/models, make sure you dont have a local directory with the same name. Otherwise, make sure bert-bas…...

中国人寿财险青岛市分公司:专业团队,卓越服务

中国人寿财险青岛市分公司拥有一支专业的团队&#xff0c;为客户提供卓越的保险服务。 公司的保险从业人员都经过严格的专业培训和考核&#xff0c;具备扎实的保险知识和丰富的实践经验。他们以客户为中心&#xff0c;用心倾听客户需求&#xff0c;为客户提供个性化的保险方案…...

【SpringCloud】基础问题

文章目录 spring-cloud-dependencies和spring-cloud-alibaba-dependencies的区别<dependencyManagement>和<dependencies>的区别<dependencyManagement><dependencies> 为什么在主函数上加上SpringBootApplication注解就可以扫描到对象为什么bootstrap…...

牛客网刷题(1)(java之数据类型、数组的创建(静态/动态初始化)、static关键字与静态属性和方法、常用的servlet包、面向对象程序设计方法优点)

目录 一、Java变量的数据类型。 <1>Java中变量的数据类型。 <2>基本数据类型。 <3>引用数据类型。 二、Java中一维数组的初始化。&#xff08;静态、动态初始化&#xff09; <1>数组。 <2>动态初始化。 <3>静态初始化。 三、看清代码后&am…...

电磁干扰(EMI)与电磁兼容性(EMC)【小登培训】

电磁干扰&#xff08;EMI&#xff09;和电磁兼容性&#xff08;EMC&#xff09;是每个产品在3C &#xff0c;CE认证过程中必不可少的测试项目&#xff1a; 一、电磁干扰&#xff08;EMI&#xff09; EMI&#xff08;Electromagnetic Interference&#xff09;是指电子设备在工作…...

保险行业的智能客服:企业AI助理与知识库的加速效应

在保险行业&#xff0c;客户服务是企业与客户之间建立信任与忠诚度的关键桥梁。随着人工智能技术的飞速发展&#xff0c;企业AI助理正逐步成为保险客服领域的重要革新力量。 一、AI助理&#xff1a;保险客服的新篇章 企业AI助理&#xff0c;以其强大的自然语言处理能力、数据分…...

PSINS工具箱函数介绍——inserrplot

关于工具箱 i n s e r r p l o t inserrplot in...

龙蟠科技业绩压力显著:资产负债率持续攀升,产能利用率也不乐观

《港湾商业观察》施子夫 黄懿 去年十月至今两度递表后&#xff0c;10月17日&#xff0c;江苏龙蟠科技股份有限公司(以下简称&#xff0c;龙蟠科技&#xff1b;603906.SH&#xff0c;02465.HK)通过港交所主板上市聆讯。 很快&#xff0c;龙蟠科技发布公告称&#xff0c;公司全…...

使用 Spring Cloud 有什么优势?

使用 Spring Cloud 有什么优势&#xff1f; 在当今的微服务架构时代&#xff0c;Spring Cloud 作为一个强大的开发框架&#xff0c;备受开发者青睐。那么&#xff0c;使用 Spring Cloud 究竟有哪些优势呢&#xff1f; 一、微服务架构简介 微服务架构是一种将单一应用程序拆分…...

MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨

开心一刻 image 产品还没测试直接投入生产时&#xff0c;这尼玛... 背景问题 再讲 binlog 之前&#xff0c;我们先来回顾下主流关系型数据库的默认隔离级别&#xff0c;是默认隔离级别&#xff0c;不是事务有哪几种隔离级别&#xff0c;别会错题意了 1、Oracle、SQL Server 的默…...

SQL进阶技巧:Hive如何进行更新和删除操作?

目录 0 Hive支持更新和删除操作吗&#xff1f; 1 Hive删除操作如何实现&#xff1f; 2 Hive更新操作如何实现&#xff1f; 3 小结 0 Hive支持更新和删除操作吗&#xff1f; Hive在默认情况下不支持更新和删除操作&#xff0c;但可以通过特定方式如使用ORCFileformat和Acid…...

nginx安装详解含 自动化编译安装 Debian/Ubuntu/CentOS/RHEL/ROCKY

1. 准备工作 1.1 选择操作系统 推荐操作系统&#xff1a;Ubuntu、CentOS、Debian等Linux发行版。系统要求&#xff1a;确保服务器有足够的CPU、内存和磁盘空间。 1.2 更新系统 更新包列表&#xff1a; sudo apt update # 对于Debian/Ubuntu sudo yum update # 对于CentOS…...

Go编程语言介绍及项目案例

Go(又称 Golang)是一种开源的编程语言,具有高效、简洁、并发性能强等特点。 一、主要特点 简洁高效: Go 语言的语法简洁明了,代码风格清晰易读。它摒弃了一些传统编程语言中的复杂特性,如继承、泛型等,使得代码更加简洁高效。例如,在 Go 语言中,函数的定义非常简洁,…...

刷爆leetcode Day11 DFS

DFS 1. 汉诺塔&#xff08;easy)2. 合并两个有序链表&#xff08;easy&#xff09;3. 反转链表&#xff08;easy&#xff09;4. 两两交换链表中的节点&#xff08;medium&#xff09;5. Pow&#xff08;x,n&#xff09;-快速幂&#xff08;medium&#xff09; 1. 汉诺塔&#x…...

虚拟机不同网络模式的区别

网络模式 NAT模式 &#xff08;可以上网&#xff09; 使用NAT模式的虚拟机都和物理机VMnet8处于同一个网段 桥接模式 &#xff08;可以上网&#xff09; 使用桥接模式的虚拟机都和物理机网卡处于同一网段 仅主机模式 &#xff08;不能上网&#xff0c;完全隔离&#xff0…...

嵌入式软件 Bug 排查与调试技巧

目录 1、准备工作 2、打印调试 实现步骤 注意事项 3、断点调试 4、观察点调试 5、远程调试 6、内存分析 内存泄漏检测 栈溢出检测 7、异常处理 8、性能分析 9、逻辑分析仪 10、示波器 11、常见bug类型 12、调试策略 1、准备工作 硬件工具准备 调试器:例如 J - …...

阿里云环境下用docker搭建redis主从复制

redis主从复制可将主redis中的数据同步到从redis中&#xff0c;具有读写分离、容灾恢复、数据备份、支持高并发等特性。 本文演示在阿里云环境下&#xff0c;用 docker 搭建 redis 主从复制&#xff08;一主二从&#xff09;的操作过程。 一、环境准备 阿里云安装CentOS7.9 6…...

Keil开发必备:AStyle代码格式化插件一键配置指南(附最新参数详解)

Keil开发必备&#xff1a;AStyle代码格式化插件一键配置指南&#xff08;附最新参数详解&#xff09; 在嵌入式开发领域&#xff0c;代码风格的一致性往往被忽视&#xff0c;却直接影响团队协作效率和代码可维护性。Keil作为嵌入式开发的主流IDE&#xff0c;原生并未提供强大的…...

LightOnOCR-2-1B在VMware虚拟环境中的部署方案

LightOnOCR-2-1B在VMware虚拟环境中的部署方案 1. 环境准备与系统要求 在VMware虚拟环境中部署LightOnOCR-2-1B模型前&#xff0c;需要确保硬件和软件环境满足基本要求。这个OCR模型虽然只有10亿参数&#xff0c;但在文档识别方面表现出色&#xff0c;特别适合企业级文档数字…...

N_m3u8DL-CLI-SimpleG:轻松下载在线视频的终极图形界面工具

N_m3u8DL-CLI-SimpleG&#xff1a;轻松下载在线视频的终极图形界面工具 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 想要快速下载网络上的M3U8格式视频吗&#xff1f;N_m3u8DL…...

小白也能用的Qwen3.5-9B:开箱即用,解锁AI图文视频新玩法

小白也能用的Qwen3.5-9B&#xff1a;开箱即用&#xff0c;解锁AI图文视频新玩法 1. 为什么选择Qwen3.5-9B&#xff1f; Qwen3.5-9B是一款强大的多模态AI模型&#xff0c;专为处理文本、图像和视频内容而设计。相比传统AI模型&#xff0c;它有三个突出优势&#xff1a; 多模态…...

面试50场才懂:20道高频题决定成败;面试是双向选择,不是你求着公司给你工作,你要做的是展示自己的价值,和公司互相匹配,不用卑微,大方就好

面了50场终于悟了:99%的面试,翻来覆去就考这20道题! 目录 面了50场终于悟了:99%的面试,翻来覆去就考这20道题! 一、开场破冰&自我认知类(第一印象定基调) 1. 请做一下自我介绍 6. 说说你的优点? 15. 你领导同事对你的评价如何? 19. 说说你的缺点? 二、求职动机…...

终极指南:使用SMUDebugTool优化AMD Ryzen系统性能与稳定性

终极指南&#xff1a;使用SMUDebugTool优化AMD Ryzen系统性能与稳定性 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...

CosyVoice Docker镜像包:从构建到生产环境部署的完整指南

最近在搞语音处理服务的容器化部署&#xff0c;发现这里面门道还挺多的。特别是像 CosyVoice 这种集成了复杂模型和依赖的服务&#xff0c;直接扔到服务器上跑&#xff0c;很容易遇到各种“玄学”问题。今天就来分享一下我折腾 CosyVoice Docker 镜像包的全过程&#xff0c;从踩…...

AI检测率太高论文过不了?2026年这4个AI写作智能降重工具降AI率平台必须用!

降AI率工具已成为学术写作中不可或缺的辅助手段。随着知网、维普等权威检测平台对AI生成内容的识别能力不断提升&#xff0c;高校师生普遍反映论文查重与AIGC率问题日益严峻。基于多所高校实测数据及用户真实反馈&#xff0c;本文将盘点2026年最实用、效果显著的AI写作智能降重…...

ImmortalWrt路由器固件自动更新终极指南:三步实现智能维护

ImmortalWrt路由器固件自动更新终极指南&#xff1a;三步实现智能维护 【免费下载链接】immortalwrt An opensource OpenWrt variant for mainland China users. 项目地址: https://gitcode.com/GitHub_Trending/im/immortalwrt ImmortalWrt作为专为中国用户深度优化的O…...

Jetson Orin NX新机到手,apt update疯狂报错?手把手教你一键换源(附清华源配置)

Jetson Orin NX国内源配置全攻略&#xff1a;从报错诊断到一键换源 刚拆封的Jetson Orin NX开发板还带着电子设备特有的金属气味&#xff0c;你迫不及待接上电源&#xff0c;看着绿色指示灯规律闪烁&#xff0c;仿佛已经能想象自己在这块性能怪兽上跑通第一个深度学习模型的场景…...