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

媒资管理之视频管理

一:业务概述:

媒资管理这个模块是我负责开发的,主要的管理对象是视频,图片,文档等

包括文件的上传,视频的处理,文件的删除

(在媒资管理界面,有个上传视频的按钮,视频是在媒资这上传的,课程图片是在内容管理)

上传的图片和视频,会单独存储到搭建的分布式文件系统当中。

当上传视频时,视频比较大,如果我选择的是断点续传来进行上传,并且上传的视频不是都能直接播放的,要进行格式的转换,所以选择一个视频文件上传之后,会自动进行一个格式处理,最后还会进行视频与课程的绑定,这些做好之后,才可以发布一个课程。

二:工作内容

在这个系统中,我一共设计了三张表:分别是媒资文件表,待处理文件表,历史处理文件表。

 

媒资文件表保存了上传文件的详细信息,比如文件名称,文件类型(图片,文档,视频),存储目录,文件存储路径,文件访问url(针对于图片来说,存储路径和url一致,但是视频的存储路径是avi,而访问url是MP4格式),文件id(md5),等

待处理文件表保存了文件名称,状态,访问地址,失败信息等

历史处理文件表保存了文件名称,状态等

在这里面,我主要给您讲一下视频的上传与处理您看可以吗?

当视频上传之后,会将视频保存到minio这个系统当中

(因为minio系统比较轻量,操作简单,免费,而且可以保证数据安全,不会丢失)

(保证不丢失,是因为它保存的数据,是分块存储的,不会全部保存到一个硬盘上,并且还有备份)

在使用它之前,在程序中添加它的一个依赖,它提供了示例方法,用来进行上传,删除和下载,在程序当中去使用它提供的方法,在方法中依靠它的核心逻辑,进行改造,实现我们想要的功能。

上传是需要先初始化出一个minio对象,在客户端创建出一个bucket,相当于一个文件夹,用来保存上传过来的数据,然后针对于这些大文件的上传,就要进行断点续传了,所以在上传之前,就需要判断一下这个文件是否已经存在于数据库和minio中,如果存在,就没必要传了,如果不存在,还要进行判断一下,接着就准备一些参数,比如桶的名称,文件的本地路径,上传之后的文件名,然后就可以调用minio对象的一个upload方法实现上传,上传完之后,将文件的相关信息保存到文件表当中。

但是上传之后的视频格式如果不是MP4类型的,就不能直接播放,所以我使用了FFmepg这个工具,进行格式转换,但是由于视频的大小一般是很大的,并且数量也多,所以为了节省时间和提高效率,我使用了xxl-job这个分布式任务调度。

三:相关问题

1:上传之后,你返回数据用的什么类?

用的dto类,继承了文件类。

2:上传文件,你用的什么接收文件?

用的multipartfile这个类型接收文件

3:在service层,你用什么接收文件信息?

创建了dto类,用来接收文件信息,包括文件名称,上传人,文件类型等

4:你要给services层传什么参数?

因为要上传嘛,所以要传文件的本地路径,文件名字,文件信息

5:你在客户端是如何存储的文件?

在进行上传的时候,会上传对象名,客户端会根据对象名来创建子目录,存放文件的

6:你是以什么格式来存储的呢?

以年月日的格式创建子目录,进行存放,方便查找数据

7:那你是如何获取当前时间的?

使用了一个获取时间的类,获取完之后,对时间格式进行了操作,以斜杠的形式分割年月日,这样客户端会创建出对应的子目录。

8:上传的文件的文件名会不会重复?重复之后怎么办呢

如果文件名重复,会发生覆盖,所以为了避免这个问题,使用文件的md5值作为文件的名字

9:会不会上传失败?

可能会,上传任务完成会返回布尔值,会对布尔值进行判断。

10:在你保存信息到文件表中时,会不会文件已经存在于这个文件表了?

嗯,是有这种可能的,所以就需要先通过文件的id,先去查一下,对查出来的对象进行一下非空判断,为空的话,在进行插入操作。

11:那你是如何插入的呢?

先创建出一个mediafile对象,再使用beanutils的copy方法,为这个新对象赋值。

然后给新对象再设置一些值,比如文件id,桶的名称 ,文件地址也就是对象名,fileid(也就是md5值),url。

12:插入会不会失败?

会,所以对返回值判断,如果小于等于0,就打印日志

13:我看你那会说用到断点续传了,你介绍一下吧

因为视频文件会比较大,所以上传的时间会比较长,如果在这一段时间内,因为网络故障的原因,导致上传失败了,就需要重新开始上传,这样比较浪费时间,使用断点续传后,就可以从上一次结束的时候继续上传。

14:那你在项目中是如何使用的呢?

主要逻辑是把一整块文件呢,分成多个小块进行上传

具体做法是首先需要先检验一下要上传的文件是否存在,如果存在就不必重新上传了,

如果不存在,前端将文件分成块后,在进行上传前,会对块进行校验,如果存在,前端就不用上传,继续下一块。        

全部上传完毕后,就将所有分块进行合并,

同时合并之后,要对这个文件进行检验,看是否完整,具体做法是将新文件的md5值与旧文件的md5值进行比较,如果相等,就是完整的,否则就是不完整。

15:对于检验文件是否存在是怎么做的?

主要看是不是存在,如果存在,就不上传了。

我是先对数据库中检验,看看是否有有这个文件,拿着文件的id,也就是md5值进行查询,进行非空判断,如果是空的,就返回false,让前端传来数据,如果是非空,也不要掉以轻心,可能是脏数据,还得去查一下minio中是否有这个文件,先通过文件的相关信息,调用get方法,获取一个流对象,对这个流对象进行非空判断,如果为空就返回false,让前端传文件,如果不为空,返回true。

相关文章:

媒资管理之视频管理

一:业务概述: 媒资管理这个模块是我负责开发的,主要的管理对象是视频,图片,文档等 包括文件的上传,视频的处理,文件的删除 (在媒资管理界面,有个上传视频的按钮&#…...

windows程序转鲲鹏服务器踩坑记【持续更新中】

1.鲲鹏处理器和Intel处理器的区别 处理器/对比项IntelKunpeng厂家因特尔(美国)华为(中国)指令集X86架构ARM-V8架构与指令集- x86 CISC复杂指令集 - 单核性能强(如至强8380主频3.8GHz) - 三级缓存优化,支持DDR4-3200和Optane内存- ARMv8-A RI…...

【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界

习题集: 【单选题】在构建Agent系统时,使用Assistant API创建Agent时,若想让Agent具备查询员工信息和发送请假申请的功能,以下对instructions参数设置最合理的是( ) A. “你可以做任何事情” B. “你能查询员工信息和发送请假申请” C. “你是公司助手,功能有:1.查询员…...

程序进程多任务线程

1.程序 程序(program)是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 2.进程 进程(process)是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。进程是操作系统资源分配和处理器调度的基本单位,拥有独立的代码、内部数…...

Finish技术生态计划: FinishRpc

finishRpc 简介 ​ 纯个人兴趣设计的项目: 因为失业在家摆烂 所以没事就想写点代码 本身也比较喜欢自己写一些好玩的demo 这个项目的设计完全是取悦自己又菜又有一个创造框架的梦想 可以用于提升框架设计思路以及实践一些常用技术的练习 可以用于校园中的练习 , 如果能对你有所…...

《商业世界的开源法则:协议选择与商业模式创新》

引言 在当今数字化时代,开源软件已成为技术生态系统中不可或缺的一部分。从Linux操作系统到Apache Web服务器,从MySQL数据库到React前端框架,开源项目支撑着全球大部分互联网基础设施和企业IT系统。然而,关于开源协议与商业使用之…...

Kubernetes》》k8s》》explain查 yaml 参数

在创建json 和yaml 时,我们可能不知道具体的参数该怎么写。同样 我们可以通过explain这个 命令来查看 每个参数具体的作用与写法 # 查看 pod类性有哪些参数 kubectl explain pod# 查看pod中 spec下面有哪些参数 kubectl explain pod.spec...

Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master

前文已经使用docker安装了kubeadm&#xff0c;因此本文使用kubeadm部署master节点。 一.先拉取必要的镜像库到本地。 在拉取之前&#xff0c;先配下镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": [&qu…...

《数据结构之美--二叉树》

一&#xff1a;引言&#xff1a; 上次我们学习了栈和队列这两个数据结构&#xff0c;今天我们来学习一个新的数据结构–二叉树中的堆。 堆其实就是一种特殊的二叉树&#xff0c;具有二叉树的性质的同时&#xff0c;还具有其他的性质。 那么在学习堆之前还是先来了解一下树。 …...

Prompt Engineering 提示工程:释放大语言模型潜力的关键技术与实践指南

提示工程:释放大语言模型潜力的关键技术与实践指南 提示工程(Prompt Engineering)作为与大型语言模型(LLM)交互的核心技术,已成为AI应用开发的关键技能。本文将系统介绍提示工程的定义与发展历程,深入剖析其核心知识点,提供实用的设计框架与技巧,并通过丰富的实战案例展示…...

std::print 和 std::println

一、基本概念 std::print 和 std::println 是 C23 新增的格式化输出函数&#xff0c;旨在替代传统的 std::cout 链式调用。它们基于 std::format 实现&#xff0c;支持类型安全的格式化字符串&#xff0c;语法更简洁&#xff0c;性能更优15。 功能特点&#xff1a; 直接输出到…...

高压直流输电MATLAB/simulink仿真模型+说明文档

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2018Ra&#xff09;软件。建议采用matlab2018 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 使用一个传输功率为1000MW&#xff08;500 kV&#xff0c;2 kA&#xff09;直流互连…...

第十四章-PHP与HTTP协议

第十四章-PHP与HTTP协议 一&#xff0c;HTTP 协议详解 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的协议之一&#xff0c;用于客户端&#xff08;如浏览器&#xff09;与服务器之间的通信。它是 Web 技术的基石…...

【阿里云大模型高级工程师ACP学习笔记】2.6.用插件扩展答疑机器人的能力边界

一、学习目标 备考阿里云大模型高级工程师ACP认证,深入学习《2.6.用插件扩展答疑机器人的能力边界》这部分内容,主要期望达成以下目标: 理解智能体应用核心概念:理解智能体(Agent)应用的核心概念,包括其如何拓展大模型能力,突破传统答疑机器人局限。掌握构建Agent系统…...

用远程代理模式轻松实现远程服务调用,打开编程新大门

通过远程代理来实现一个简易的远程过程调用实例。带你打开新的大门。 Socket 远程代理服务案例 基于 Socket 的远程服务&#xff0c;我们需要完成以下步骤&#xff1a; 服务端实现&#xff1a;创建一个远程服务&#xff0c;通过 Socket 接受客户端请求并提供计算服务。 客户端…...

(001)Excel 快捷键

文章目录 时间 时间 当前日期&#xff1a;ctrl ; (分号)。当前时间&#xff1a;ctrl Shift ; (分号)。...

TMI投稿指南(二):投稿文章注意事项

文章结构&#xff1a; https://journals.ieeeauthorcenter.ieee.org/create-your-ieee-journal-article/create-the-text-of-your-article/structure-your-article/ 补充材料&#xff1a;准备补充材料 - IEEE 作者中心期刊 --- Prepare Supplementary Materials - IEEE Author…...

从困局到破局的AI+数据分析

从困局到破局的AI数据分析 困局&#xff1a;数据分析的四道高墙破局&#xff1a;AI赋能全流程数据分析远见&#xff1a;AI数据分析的革命性意义 数据是新时代的石油&#xff0c;人工智能是炼油厂。当两者强强联合&#xff0c;一场数据分析的革命正悄然发生。 多少次你面对Excel…...

12. RANSAC点云多平面拟合分割

本文看了博客RANSAC点云多平面拟合分割-CSDN博客的文章&#xff0c;该博客将多平面拟合分割讲的很详细了&#xff0c;这里只是作为笔记用。 1.RANSAC算法原理 三维平面拟合&#xff08;最小二乘法&#xff09; 具体实现见下面代码&#xff1a; def SVD(points):# 二维&#…...

Prompt

提示工程指南 | Prompt Engineering GuideGoogle 官方提示工程 (Prompt Engineering)白皮书 | 宝玉的分享https://www.geeksforgeeks.org/what-is-prompt-engineering-the-ai-revolution/Prompt Engineering for Reasoning ModelsPrompt Engineering with Reasoning Models 1.p…...

[特殊字符] SpringCloud项目中使用OpenFeign进行微服务远程调用详解(含连接池与日志配置)

&#x1f4da; 目录 为什么要用OpenFeign&#xff1f; 在cart-service中整合OpenFeign 2.1 引入依赖 2.2 启用OpenFeign 2.3 编写Feign客户端 2.4 调用Feign接口 开启连接池&#xff0c;优化Feign性能 3.1 引入OkHttp 3.2 配置启用OkHttp连接池 3.3 验证连接池生效 Feign最佳…...

迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎

4月28日&#xff0c;迈瑞医疗&#xff08;300760.SZ&#xff09;发布2024年年度报告。报告期内&#xff0c;公司实现营业收入367.26亿元&#xff0c;同比增长5.14%&#xff1b;实现归母净利润116.68亿元&#xff0c;同比增长0.74%&#xff1b;经营活动产生的现金流量净额124.25…...

「地平线」创始人余凯:自动驾驶尚未成熟,人形机器人更无从谈起

温馨提示&#xff1a;运营团队2025年最新原创报告&#xff08;共210页&#xff09; —— 正文&#xff1a; 近日&#xff0c;国内智驾芯片上市公司[地平线]创始人兼CEO余凯&#xff08;先生&#xff09;接受腾讯新闻访谈时&#xff0c;提到如今大火的人形机器人&#xff0c;核…...

R 语言科研绘图第 43 期 --- 桑基图-冲击

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.weixin.qq.c…...

SpringBoot应用原生或docker镜像容器集成Skywalking

相关组件及版本 序号 组件 版本 备注 1 skywalking-oap-server 8.9.1 2 elasticsearch 7.17.6 3 skywalking-ui 8.9.1 4 apache-skywalking-java-agent 8.15.0 一、JAR包方式部署服务 下载apache-skywalking-java-agent jar文件 使用如下名称执行 java \ -j…...

模板--进阶

1. 非类型模板参数 模板解决了两类问题 1控制数据类型 2控制某种设计逻辑 类域可以直接访问什么&#xff1f; 1static修饰的静态成员变量 2typedef定义的内嵌类型 3 内部类 下面我们就要引出一个模板的知识点----------再用类模板的时候从类模板里面去取东西的时候 要…...

PostgreSQL无法查看表中数据问题排查

在 PostgreSQL 中&#xff0c;恢复数据库后&#xff0c;使用 DBeaver 等工具可以看到数据库和表名&#xff0c;但无法查询到表中数据&#xff0c;可能是以下原因之一。以下是可能的原因和解决方法&#xff1a; 1. 恢复未完全成功 原因&#xff1a;数据库恢复过程中可能未完全成…...

实验研究 | 千眼狼高速摄像机驱动精密制造创新

研究背景 小模数齿轮作为精密制造领域的核心组件&#xff0c;以“结构紧凑、重量轻、精度高”等优势&#xff0c;广泛应用于航空航天、工业机器人、精密仪器、医疗设备、新能源和微电机等领域。传统抛光技术效率低、成本高、表面质量不足&#xff0c;电解等离子体抛光技术&am…...

AWS虚拟专用网络全解析:从基础到高级实践

导语 AWS虚拟专用网络是连接企业本地数据中心与AWS云环境的关键桥梁。本文将深入探讨AWS VPN的核心概念、配置方法、最佳实践以及常见问题解决方案,助您构建安全、可靠的混合云网络架构。 一、AWS VPN概述 1. 定义 AWS VPN是一种网络服务,允许用户通过加密隧道将本地网络…...

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能 北京海特伟业科技有限公司任洪卓发布于2025年4月28日 在数字化转型浪潮下&#xff0c;IP应急广播呼叫对讲广播系统凭借其网络化、智能化、融合化、多元化等优势&#xff0c;已…...

我的HTTP和HTTPS

注释&#xff1a;本文章架构跟随小林coding&#xff0c;在此基础上加深个人理解 小林coding&#xff1a;https://xiaolincoding.com/network/2_http/http_interview.html HTTP基本概念 HTTP是什么&#xff1f; http的中文名是超文本传输协议&#xff0c;超文本就是html&…...

python_股票月数据趋势判断

目录 前置 代码 视频&月数据 前置 1 A股月数据趋势大致判断&#xff0c;做一个粗略的筛选 2 逻辑&#xff1a; 1&#xff09;取最近一次历史最高点 2&#xff09;以1&#xff09;中最高点为分界点&#xff0c;只看右侧数据&#xff0c;取最近一次最低点 3&#xf…...

计算机考研精炼 计网

第 19 章 计算机网络体系结构 19.1 基本概念 19.1.1 计算机网络概述 1.计算机网络的定义、组成与功能 计算机网络是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 …...

大数据应用开发和项目实战-Matplotlib

Matplotlib的介绍 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式。 Matplotlib 可以用来绘制各种静态&#xff0c;动态&#xff0c;交互式的图表。比如说散点图、柱状图等等。 Matplotlib的安装与…...

SQLMesh CLI 实战教程: 构建和维护数据转换管道的快速指南

在数据工程领域&#xff0c;构建和维护数据转换管道是一项复杂而关键的任务。SQLMesh 是一个强大的工具&#xff0c;可以帮助你简化这一过程。本文将带你快速了解如何使用 SQLMesh CLI 来构建和维护数据转换管道。本文的目标是在 30 分钟或更短的时间内&#xff0c;让你熟悉 SQ…...

行政区划代码

本文数据来源&#xff1a;中华人民共和国民政部 在平常数据研究和开发中&#xff0c;经常会用到行政区划代码。而行政区划代码的使用&#xff0c;因年份不同可能也不尽完全相同。故整理了1980年到2024年所有的行政区划代码。 这样不仅仅适用于研究区划代码的变更研究&#xf…...

Spring生命周期

在Spring框架中&#xff0c;Bean的生命周期指的是从Bean的创建到销毁的整个过程。这个过程包括了多个阶段&#xff0c;每个阶段都有特定的操作。下面是一个典型的Spring Bean生命周期的概述&#xff1a; 一. 实例化&#xff08;Instantiation&#xff09; 当Spring容器启动时&…...

前端连接websocket服务报错 Unexpected response code: 301

前端连接websocket服务报错 Unexpected response code: 301 引直连测试301重定向修改nginx配置 引 websocket后端服务正常&#xff0c;监听正常&#xff0c;可以通过简单的前端代码进行连接&#xff0c;但是通过nginx反向代理后报错Error during WebSocket handshake: Unexpec…...

C语言(5)—操作符详解

文章目录 一、操作符分类概览二、二进制与进制转换2.1 进制基本概念 三、原码、反码与补码3.1 基本概念 四、位操作符详解 一、操作符分类概览 C语言中的操作符可以分为以下几大类&#xff1a; 算术操作符&#xff1a;, -, *, /, % 移位操作符&#xff1a;<<, >>…...

ubuntu新增磁盘挂载

1. 确认新磁盘 使用 lsblk 命令查看系统中所有的块设备&#xff0c;找出新增的磁盘。 rootzzwl:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 60G 0 disk ├─sda1 8:1 0 …...

【计网】计算机网络的类别与性能

一、计算机网络的分类 计算机网络可以根据不同的标准进行分类。下面是两种常见的分类方法&#xff1a; 1.按照网络的作用范围进行分类 广域网 (WAN): 广域网覆盖的范围非常广泛&#xff0c;通常跨越城市、国家或甚至是全球。WAN主要用于连接地理位置相隔较远的计算机和网络设…...

Field访问对象int字段,对象访问int字段,通过openjdk17 C++源码看对象字段访问原理

在Java反射机制中&#xff0c;访问对象的int类型字段值&#xff08;如field.getInt(object)&#xff09;的底层实现涉及JVM对内存偏移量的计算与直接内存访问。本文通过分析OpenJDK 17源码&#xff0c;揭示这一过程的核心实现逻辑。 一、字段偏移量计算 1. Java层初始化偏移量…...

香橙派打包qt文件报错“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案

PyQt 报错总结&#xff1a;打包文件过程&#xff0c;“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案全解析 在使用 PyQt5 搭建图形界面时&#xff0c;打包文件的过程中出现的问题&#xff0c;真难绷&#xff0c;搞了半天。 Qt 平台插件 xcb 无法加载QOb…...

Flutter 学习之旅 之 flutter 作为 module ,在 Android 的界面中嵌入Flutter界面功能的简单整理

Flutter 学习之旅 之 flutter 作为 module &#xff0c;在 Android 的界面中嵌入Flutter界面功能的简单整理 目录 Flutter 学习之旅 之 flutter 作为 module &#xff0c;在 Android 的界面中嵌入Flutter界面功能的简单整理 一、简单介绍 二、在同一个布局中同时显示 Androi…...

在android 系统上qnn sdk转换,运行模型示例

前面讲了如何配置qnn sdk的环境&#xff0c;这一篇总结下qnn 实际转换一个onnx 模型&#xff0c;并运行的实现步骤。 设备&#xff1a; 1. ubuntu22.04 的Linux 服务器。 2. 一台android手机。 一、下载模型 from optimum.onnxruntime import ORTModelForSequenceClassifi…...

docker安装Canal1.1.5,MySQL5.7踩坑

docker安装Canal 前情提示安装MySQLdocker安装MySQL1. 拉取镜像2. 创建容器映射宿主机目录3. docker run 配置mysql重启mysql新建canal用户 安装Canal创建docker网络安装Canal1.拉取canal镜像2.创建目录3.运行容器 踩坑问题1 前情提示 关于版本问题&#xff0c;官方也没有详细…...

SpringBoot 接口国际化i18n 多语言返回 中英文切换 全球化 语言切换

介绍 Spring Boot通过MessageSource接口来实现国际化&#xff0c;它可以加载不同的消息资源文件&#xff0c;通常是.properties格式。通过定义不同的语言文件&#xff08;例如&#xff1a;messages_en.properties、messages_zh.properties等&#xff09;&#xff0c;可以根据用…...

C++ 嵌套类 (详解 一站式讲解)

目录 嵌套类 嵌套类的定义 嵌套类结构的访问权限 pimpl模式&#xff08;了解&#xff09; 嵌套类 嵌套类的定义 首先介绍两个概念&#xff1a; 类作用域&#xff08;Class Scope&#xff09; 类作用域是指在类定义内部的范围。在这个作用域内定义的成员&#xff08;包括…...

EasyCVR视频汇聚平台助力大型生产监控项目摄像机选型与应用

一、方案背景 在300路大型生产监控项目中&#xff0c;由于生产环境复杂多样&#xff0c;涵盖室外厂区、大型车间、室内办公区域等不同场景&#xff0c;单一类型的摄像机难以满足全方位、精细化的监控需求。EasyCVR作为一款功能强大的视频融合管理平台&#xff0c;具备灵活的视…...

解决leensa无法使用的办法:平替教程

Leensa已经完全连不上&#xff0c;并显示超时&#xff0c;至于之前有传言称他们会恢复服务也完全是无稽之谈。 那么&#xff0c;Leensa停止服务后&#xff0c;广大的外贸人&#xff0c;设计人&#xff0c;留学生以及技术人学习&#xff0c;查资料以及开发客户该怎么办呢&#…...