华为云大文件分片上传操作

华为云obs切片上传封装 结合vue2 element upload 带有进度条 【代码】华为云obs切片上传封装 结合vue2 element upload 带有进度条。 阅读详情

记录一下:

        由于spring boot上传 都是使用 MultipartFile file,华为云提供的文档都是File 有一定出入所以结合自己实际需求进行完善,以记录心路历程,这套也可使用在阿里云的分片上传

华为云官方文档:

分段上传_对象存储服务 OBS_Java_上传对象_华为云

分段上传分为如下3个步骤:

  1. 初始化分段上传任务(ObsClient.initiateMultipartUpload)。
  2. 逐个或并行上传段(ObsClient.uploadPart)。
  3. 合并段(ObsClient.completeMultipartUpload)或取消分段上传任务(ObsClient.abortMultipartUpload)。
String endPoint = "obs.east.myhuaweicloud.com"; // 这个是华为云存储服务的地址写自己的
String ak = "*** Provide your Access Key ***";  // 这个是AK密钥
String sk = "*** Provide your Secret Key ***";  // 这是秘密访问密钥

AK/SK(Access Key ID/Secret Access Key)即访问密钥,包含访问密钥ID(AK)和秘密访问密钥(SK)两部分,华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。

// 创建ObsClient实例 也就是连接上华为obs存储服务器 ,这个一般是写个bean方法,系统启动时就连接好
ObsClient obsClient = new ObsClient(ak, sk, endPoint);

// 例如
@Configuration
@Slf4j
public class ObsBeanConfig {
    @Value("${obs.ak}")
    private String ak;
    @Value("${obs.sk}")
    private String sk;
    @Value("${obs.endpoint}")
    private String endPoint;

    @Bean
    public ObsClient getObsClient() {
        log.info("obs开始加载");
        return new ObsClient(ak, sk, endPoint);
    }
}
       
    // 每个分片的大小,用于计算文件有多少个分片。单位为字节。
    final long partSize = 10 * 1024 * 1024L;   //10 MB。
 String bucketName = "华为obs桶名称,申请了华为obs后自己配的名称";

          // objectName 是路径,分片文件最终整合的路径
       String objectName = "multipartUpload/"+objectName;
        // 创建InitiateMultipartUploadRequest对象。
 InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
InitiateMultipartUploadResult prebuilt = obsClient.initiateMultipartUpload(request);
  // 获取全局id
        String uploadId = prebuilt.getUploadId();
        // 如果并发量大的话 初始化线程池  20线程数量
      //  ExecutorService executorService = Executors.newFixedThreadPool(20);
        // partTags是PartEtag的集合。PartEtag由分片的ETag和分片号组成。
        List<PartEtag> partTags = new ArrayList<PartEtag>();
        // 计算有多少个分片
        int partCount = (int) (fileLength / partSize);
        // 如果取余数不为零则追加一个
        if (fileLength % partSize != 0) {
            partCount++;
        }

 try {
            for (int i = 0; i < partCount; i++) {
                long startPos = i * partSize;
                long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
                // 跳过已经上传的分片。
                inputStream.skip(startPos);
                UploadPartRequest uploadPartRequest = new UploadPartRequest();
                uploadPartRequest.setBucketName(bucketName);
                uploadPartRequest.setObjectKey(objectName);
                uploadPartRequest.setUploadId(uploadId);
                uploadPartRequest.setInput(inputStream);
                // 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
                uploadPartRequest.setPartSize(curPartSize);
                // 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,Obs将返回InvalidArgument错误码。
                uploadPartRequest.setPartNumber( i + 1);
                // 每个分片不需要按顺序上传,甚至可以在不同客户端上传,obs会按照分片号排序组成完整的文件。
                UploadPartResult uploadPartResult = obsClient.uploadPart(uploadPartRequest);
                // 每次上传分片之后,ObS的返回结果包含PartETag。PartETag将被保存在partTags中。
                partTags.add(new PartEtag(uploadPartResult.getEtag(), uploadPartResult.getPartNumber()));
            }
            // 开始线程池时候使用:等待上传完成
         /*   executorService.shutdown();
            while (!executorService.isTerminated())
            {
                try
                {
                    executorService.awaitTermination(5, TimeUnit.SECONDS);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }*/
            // 合并分片段
            // 在执行完成分片上传操作时,需要提供所有有效的partETags。obs收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,obs将把这些分片组合成一个完整的文件。
            CompleteMultipartUploadRequest multipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partTags);
            // 完成分片上传。
            CompleteMultipartUploadResult completeMultipartUploadResult = obsClient.completeMultipartUpload(multipartUploadRequest);
            // 返回全局id,桶名,对象名称 用于后续处理 比如取消分片上传,查询分片信息等
            Map<String,Object> maps = new HashMap<>();
            maps.put("objectName",objectName);
            maps.put("bucketName",bucketName);
            maps.put("uploadId",uploadId);
            return maps;
        }catch (Exception e){
            log.error("分片循环上传失败!"+e.getMessage());
            return null;
        }

前端直传华为云OBS 本文是用前端将图片直传华为云OBS,可供参考。(比较好的方式是建议使用后台生成签名认证方式上传) 1.在华为云开通OBS对象存储 2.下载js sdk引入项目中 3. 首先创建实例 // 创建ObsClient实例 var obsClient = new ObsClient({ access_key_id: '*** Provide your Access Key ***', secret_access_key: '*** Provide your Secret 阅读详情

相关推荐

JS实现大文件上传——分片上传方法

提供手机,QQ,微信,邮箱等联系方式,提供7*24小时技术支持,提供长期技术支持和维护服务,提供远程1对1技术指导,提供二次开发指导,提供文档教程,提供视频教程。支持在服务端保存文件夹层级结构,支持将文件夹层级结构信息保存到数据库中,支持下载时能够将文件夹层级结构下载下来,支持下载文件夹,下载文件夹支持断点续传,id=e1f49f3e1d4742e19135e00bd41fa3de。接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表。

weixin_52041354的博客 473

如何使用Spring Boot和Vue框架,集成华为云OBS来实现大文件切片上传?

华为云对象存储服务(OBS)是一种安全可靠、高可扩展的云存储服务。它提供了全球范围的数据存储和访问能力,适用于各种场景,包括大数据分析、备份和恢复、多媒体应用等。华为云OBS的链接:https://www.huaweicloud.com/intl/zh-cn/product/obs.html大文件切片上传是一种将大文件分割成小片段进行上传的技术。通过将大文件切片上传,可以降低单个请求的数据量,提高上传速度和稳定性。将文件切割成固定大小的片段。依次上传每个片段,并将它们按照一定的顺序存储在服务器端。

网络技术联盟站 1323

Spring Boot 分片上传文件

背景 最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上传大文件过程中进行优化实时展现进度条,进行技术评估后针对框架文件上传进行扩展升级,扩展接口支持大文件分片上传处理,减少服务器瞬时的内存压力,同一个文件上传失败后可以从成功上传分片位置进行断点续传,文件上传成功后再次上传无需等待达到秒传的效果,优化用户交互体验,具体的实现流程如下图所示(java fhadmin.cn) 文件MD5计算 对于文件md5的计算我们

868

华为云断点续传+分片上传的思路(已验证)

java如何实现华为云obs分片上传、断点续传

weixin_55915253的博客 1320

逆向工程师的Shopee爬虫避坑指南:af-ac-enc-dat参数生成原理与反反爬策略

本文深入剖析了Shopee电商平台的反爬虫加密机制,重点解析了核心请求头参数x-sap-ri、x-sap-sec及af-ac-enc-dat的生成原理与联动关系。文章从逆向工程视角,提供了定位加密代码、分析算法逻辑的实战方法,并分享了基于JS执行环境模拟与无头浏览器控制的可持续反反爬策略,为高效、稳定地采集数据提供专业指南。

weixin_28607671的博客 1490

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9943

华为云文件上传(单个上传和分段上传)

华为云文件上传(单个和分段)

Missying55的博客 2936

Keil AC6编译器独立安装与配置指南:不升级Keil MDK也能用上新工具链

本文详细介绍了如何在不升级Keil MDK的情况下独立安装和配置Arm Compiler 6(AC6),帮助嵌入式开发者充分利用AC6的编译速度、代码密度和现代语言支持优势。通过零侵入式解决方案,开发者可以在现有环境中灵活切换编译器版本,提升开发效率。

weixin_30872157的博客 552

SpringMVC大文件上传的跨平台实现与兼容性讨论

支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传。

weixin_52050572的博客 944

CMOS中的 latch-up 闩锁效应、添加tap解决latch-up、使用combained area绘制TAP TAP的作用 IC后端版图【VLSI】

本文详细阐述了闩锁效应latch-up问题、如何通过添加Tap来解决。详细讲述了如何通过combained area来绘制TAP

Jie_MSD的博客 1万+

第1.1节 构网型 vs. 跟网型:根本区别与技术原理

构网型与跟网型变流器的本质区别在于控制哲学与等效模型。跟网型变流器采用"电压跟随,电流注入"策略,等效为受控电流源,依赖电网电压作为参考,在弱电网下存在稳定性问题。构网型变流器采用"自主同步,电压构建"策略,等效为受控电压源,能主动构建电压和频率,具备自主运行、黑启动和电网支撑能力。两者的核心差异体现在同步机制、电网依赖性、故障行为和系统支撑等方面。构网型变流器更适合高比例新能源、弱电网和微电网场景,是未来电力系统的重要发展方向。

技术工作者 1391

信创环境下,SpringBoot如何实现百M大文件的安全上传?

支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传。

weixin_52050572的博客 473

华为OD机试2025C卷真题题库目录|机考题库 + 算法考点详解

本文整理华为OD 2025C卷 机试(机考)题库,提供高频考点精析与详细题目内容,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 3981

PHP网页大文件分片上传的开源组件有哪些?

核心功能已跑通,但IE兼容性和文件夹解析仍需打磨。欢迎大神加入QQ群交流优化方案!

weixin_52050572的博客 1017

Android16 自定义HAL层适配一些VINTF和SELINUX问题修改

在RK里面一般权限矩阵在/rockchip/common/manifests/目录,我这版Android16的代码比较特殊,这里重点修改/device/rockchip/rockchip_generic/manifests/frameworks_compatibility_matrix.xml这个文件,不同的版本注册方式不同,在。hal_ruip_default.te,hal_ruip.te,attributes文件。拓展策略的方式添加,但是在Android16里面发现用不了。发现HAL层服务注册成功了。

tzj1058756809的博客 242

Cadence OrCAD Capture 原理图中创建差分对约束的两种常用方法

本文介绍在原理图设计阶段,添加差分对的方法。

fydar的博客 3930

如何使用Java在华为云OBS上传大文件?

在上面的代码中,我们首先定义了OBS服务的端点、AK/SK密钥、OBS桶的名称和要上传的对象的对象键。在使用华为云OBS上传大文件时,我们可以使用Java代码实现,本文将介绍利用Java代码上传大文件至华为云OBS的方法。在本文中,我们介绍了华为云OBS的概念和特点,以及如何使用Java代码将大文件上传到OBS。通过学习和使用OBS,我们可以更好地管理和存储大量的数据,提高数据的安全性和可靠性,提高工作效率和服务质量。上述代码中,首先配置了OBS连接信息,创建OBS客户端,并创建上传请求。

网络技术联盟站 2831

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JS大文件分片上传/多线程上传

JS大文件分片上传/多线程上传,JAVASCRIPT实现大文件分片上传处理,JS 大文件上传下载解决方案,前端JS怎么实现大文件G级的断点续传(分块上传)和分段下载,前端上传文件或者上传文件夹,HTML+AJAX实现上传大文件方案,h5批量下载文件,HTTP+断点续传,前端处理大文件/视频分片上传,断点续传,VUE—实现文件上传(多文件),图片上传,VUE 项目大文件上传下载解决方案,VUE将前端的JSON文件上传到后台对应目录,id=e1f49f3e1d4742e19135e00bd41fa3de。

alisky119的博客 1180

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

突破上传瓶颈:x-file-storage大文件分片上传的终极实现方案

你是否还在为GB级文件上传失败而头疼?还在忍受传统表单上传的超时崩溃?本文将深度剖析x-file-storage项目中分布式文件系统的分片上传核心技术,带你掌握支持20+存储平台的通用解决方案。读完本文你将获得: - 分片上传全流程的技术拆解(初始化→上传→合并) - 150行核心代码手把手实现断点续传 - 跨平台适配的分片策略(从阿里云到MinIO) - 性能优化指南(并发控制/哈希校验/异常恢

gitblog_01407的博客 950

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PHP网页大文件分片上传控件如何实现金融级数据安全?

核心功能已跑通,但IE兼容性和文件夹解析仍需打磨。欢迎大神加入QQ群交流优化方案!

2501_90646763的博客 796

JS 大文件分割/分片上传

研发部门的同事调研过百度的webuploader这个组件,发现他实际上就是对Flash和HTML5进行了一个封装,本质还是调的HTML5的API,之前在项目中也用过,尝试过,但是最终都不太满意,一个是兼容性非常差,说的是兼容IE,但是在IE用的是Flash,在很多用户的电脑上用不了,卡顿崩溃发生的太频繁,文件上传的数量一多比如几千个,前端页面就开始卡了,用户体验非常差。接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表。示例中已经包含此目录。

alisky119的博客 760

前端大文件上传优化方案——分片上传

聊下HTML5吧,怎么说呢,HTML5也就是chrome提供的一个API来实现文件分片,反正基本的需求,小文件用是能用,但是用起来多多少少还是有点别扭,扩展性,安全性,稳定性用户那阵都不太满意,关键是什么,我们是没办法对HTML5进行扩展,个性化和定制化开发的,基本上被谷歌给限制死了,这也是现在国产化的意义,希望能够打破这个限制。接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表。将up6组件复制到项目中。示例中已经包含此目录。

alisky119的博客 730

利用HTML5分片上传超大文件

用户上传的文件比较大,有20G左右,直接用HTML传的话容易失败,服务器也容易出错,需要分片,分块,分割上传。利用HTML5分片上传超大文件,HTML5分块上传超大文件,HTML5切片上传超大文件,HTML5批量上传超大文件,HTML5分块上传超大文件解决方案,HTML5上传文件夹,HTML5加密上传超大文件,HTML5分块上传超大文件思路,HTML5分块上传超大文件实例,HTML5分块上传超大文件源码,大文件上传测试推荐使用IIS以获取更高性能。小文件上传测试可以使用IIS Express。

weixin_45525177的博客 974

js实现大文件上传——分片上传方法

用户上传的文件比较大,有20G左右,直接用HTML传的话容易失败,服务器也容易出错,需要分片,分块,分割上传。js实现大文件上传——分片上传方法,js实现大文件上传,js实现大文件上传解决方案,js实现大文件上传思路,js实现大文件上传实例,js实现大文件分片上传,js实现大文件分块上传,js实现大文件分片上传,js实现大文件切片上传,js实现大文件加密上传,js实现大文件批量上传,js实现文件夹上传,up6/upload/年/月/日/guid/filename。选择对应的数据表脚本,这里以SQL为例。

weixin_45525177的博客 495

web大文件上传解决方案支持分片断点上传

用户上传的文件比较大,有20G左右,直接用HTML传的话容易失败,服务器也容易出错,需要分片,分块,分割上传。web大文件上传解决方案支持分片断点上传,web大文件上传解决方案,web大文件上传思路,web大文件上传实例,web大文件分片上传解决方案,web大文件分块上传解决方案,web大文件切片上传解决方案,web大文件批量上传解决方案,web大文件加密上传解决方案,web文件夹上传解决方案,up6/upload/年/月/日/guid/filename。NOSQL示例不需要任何配置,可以直接访问测试。

weixin_45525177的博客 707

HTML5实现大文件分片上传思路

研发部门的同事调研过百度的webuploader这个组件,发现他实际上就是对Flash和HTML5进行了一个封装,本质还是调的HTML5的API,之前在项目中也用过,尝试过,但是最终都不太满意,一个是兼容性非常差,说的是兼容IE,但是在IE用的是Flash,在很多用户的电脑上用不了,卡顿崩溃发生的太频繁,文件上传的数量一多比如几千个,前端页面就开始卡了,用户体验非常差。接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表。示例中已经包含此目录。

alisky119的博客 962
上一篇: 解决使用java.util.zip.ZipFile解压含中文内容的压缩包报:MALFORMED的问题
下一篇: vue3.0+electron+element-plus项目搭从0开始建教程(1)
AngerJava
博客等级 码龄9年 5粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值