Alibaba Cloud 实现大文件上传
在 Spring Boot 项目中使用阿里云平台实现大文件存储并提升文件的存储与读取效率可以通过集成阿里云的对象存储服务OSS。阿里云 OSS 是一个海量、安全、低成本、高可靠的云存储服务非常适合大文件存储需求。配置阿里云 OSS 客户端创建配置类来初始化 OSS 客户端。需要获取阿里云的 AccessKeyId、AccessKeySecret 以及 Endpoint。ConfigurationpublicclassOssConfig{privateStringendpointhttps://oss-cn-your-region.aliyuncs.com;// 替换为实际的endpointprivateStringaccessKeyIdyour-access-key-id;// 替换为实际的AccessKeyIdprivateStringaccessKeySecretyour-access-key-secret;// 替换为实际的AccessKeySecretBeanpublicOSSossClient(){returnnewOSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);}}上传文件到 OSS通过 Spring Boot 的 Service 注解创建一个服务类来实现上传大文件到 OSS。ServicepublicclassOssService{AutowiredprivateOSSossClient;privateStringbucketNameyour-bucket-name;// 替换为你的Bucket名称publicStringuploadFile(MultipartFilefile)throwsException{StringfileNamefile.getOriginalFilename();InputStreaminputStreamfile.getInputStream();// 将文件上传到指定的存储桶ossClient.putObject(bucketName,fileName,inputStream);// 返回文件的访问URLreturnhttps://bucketName.oss-cn-your-region.aliyuncs.com/fileName;}}文件下载提供文件下载接口以便能够从 OSS 上读取文件。ServicepublicclassOssDownloadService{AutowiredprivateOSSossClient;privateStringbucketNameyour-bucket-name;publicInputStreamdownloadFile(StringfileName){// 从OSS下载文件returnossClient.getObject(bucketName,fileName).getObjectContent();}}提升存储与读取效率的建议分片上传对于大文件阿里云 OSS 支持分片上传这样可以大大提升上传效率。分片上传的工作原理是将大文件分割成多个小片段分别上传最后再合并。CDN 加速如果文件主要用于静态资源访问可以启用阿里云的 CDN内容分发网络来加速文件读取和下载特别是提升地理分布式的用户访问速度。并发处理对于文件上传和下载可以通过异步或多线程的方式提高效率。分片上传示例使用阿里云 OSS 提供的 MultipartUploadRequest 来实现分片上传。ServicepublicclassOssMultipartUploadService{AutowiredprivateOSSossClient;privateStringbucketNameyour-bucket-name;publicStringmultipartUpload(MultipartFilefile)throwsException{StringfileNamefile.getOriginalFilename();InputStreaminputStreamfile.getInputStream();// 初始化分片上传InitiateMultipartUploadRequestrequestnewInitiateMultipartUploadRequest(bucketName,fileName);StringuploadIdossClient.initiateMultipartUpload(request).getUploadId();ListPartETagpartETagsnewArrayList();intpartSize1024*1024*5;// 每个分片5MBbyte[]buffernewbyte[partSize];intbytesRead;intpartNumber1;while((bytesReadinputStream.read(buffer))!-1){UploadPartRequestuploadPartRequestnewUploadPartRequest();uploadPartRequest.setBucketName(bucketName);uploadPartRequest.setKey(fileName);uploadPartRequest.setUploadId(uploadId);uploadPartRequest.setInputStream(inputStream);uploadPartRequest.setPartSize(bytesRead);uploadPartRequest.setPartNumber(partNumber);partETags.add(ossClient.uploadPart(uploadPartRequest).getPartETag());}// 完成分片上传CompleteMultipartUploadRequestcompleteMultipartUploadRequestnewCompleteMultipartUploadRequest(bucketName,fileName,uploadId,partETags);ossClient.completeMultipartUpload(completeMultipartUploadRequest);returnhttps://bucketName.oss-cn-your-region.aliyuncs.com/fileName;}}断点续传示例在 Spring Boot 项目中使用阿里云 OSS对象存储服务上传大文件时可以引入断点续传机制来确保大文件上传过程中因网络波动或其他原因中断时能够从中断的地方继续上传。阿里云 OSS SDK 提供了断点续传上传的功能称为 Resumable Upload。该内置的断点续传上传功能可以通过 OSSResumableUpload 来实现。该功能会自动记录上传的状态并在下次上传时恢复进度。断点续传是基于分片上传实现的因此它包括了多线程、也包括了上传失败后重试机制。断点续传功能需要在上传过程中自动保存上传进度可以通过阿里云的 OSSResumableUpload API 实现。ServicepublicclassOssResumableUploadService{AutowiredprivateOSSossClient;privateStringbucketNameyour-bucket-name;// 替换为你的bucket名称publicStringresumableUpload(MultipartFilemultipartFile)throwsException{StringfileNamemultipartFile.getOriginalFilename();StringlocalTempFilePath/tmp/fileName;// 需要有临时存储路径来保存中间文件// 将 MultipartFile 保存到本地的临时文件FiletempFilenewFile(localTempFilePath);multipartFile.transferTo(tempFile);// 配置分片大小并且设置本地记录文件来记录进度UploadFileRequestuploadFileRequestnewUploadFileRequest(bucketName,fileName);uploadFileRequest.setUploadFile(tempFile.getPath());uploadFileRequest.setPartSize(1024*1024*5);// 设置每个分片的大小为5MBuploadFileRequest.setTaskNum(5);// 设置并发线程数uploadFileRequest.setEnableCheckpoint(true);// 启用断点续传// 执行断点续传上传ossClient.uploadFile(uploadFileRequest);// 清理临时文件tempFile.delete();// 返回文件的访问URLreturnhttps://bucketName.oss-cn-your-region.aliyuncs.com/fileName;}}临时文件存储将 MultipartFile 转换为本地文件因为阿里云 OSS 的断点续传需要依赖本地文件来记录上传的进度。分片大小和并发控制设置了每个分片的大小为 5MB并使用 5 个并发线程来上传提升上传效率。断点续传启用通过 setEnableCheckpoint(true) 启用断点续传机制。阿里云 OSS 会在本地生成一个 .ossupload 的文件记录上传的进度。如果上传中断重新调用该方法时会自动从上次中断的地方继续上传。删除临时文件上传成功后将本地的临时文件删除。可以实现上传进度回调以便在上传过程中获取当前的上传状态uploadFileRequest.setProgressListener(newProgressListener(){OverridepublicvoidprogressChanged(ProgressEventprogressEvent){longbytesprogressEvent.getBytes();System.out.println(Uploaded bytes: bytes);}});断点续传不仅限于上传在文件下载过程中也可以通过阿里云 OSS 提供的 ResumableDownloadRequest 实现断点续传下载。如果下载过程中断可以从中断处继续。在阿里云 OSS 的文件断点续传下载中默认情况下没有内置的自动重试功能。但是阿里云 OSS SDK 支持对下载失败后的手动重试也就是说如果下载失败可以自行实现重试逻辑结合断点续传的功能从中断处继续下载。ServicepublicclassOssDownloadServiceWithRetry{AutowiredprivateOssClientServiceossClientService;publicvoiddownloadFileWithRetry(StringobjectName,StringdownloadFilePath,intmaxRetryCount)throwsThrowable{OSSossClientossClientService.createOssClient();intretryCount0;booleandownloadSuccessfalse;while(!downloadSuccessretryCountmaxRetryCount){try{// 设置断点续传下载请求DownloadFileRequestdownloadFileRequestnewDownloadFileRequest(ossClientService.getBucketName(),objectName);downloadFileRequest.setDownloadFile(downloadFilePath);// 本地存储路径downloadFileRequest.setPartSize(1024*1024*5);// 设置每个分片的大小为5MBdownloadFileRequest.setTaskNum(5);// 设置并发下载线程数downloadFileRequest.setEnableCheckpoint(true);// 启用断点续传// 下载文件DownloadFileResultdownloadFileResultossClient.downloadFile(downloadFileRequest);downloadSuccesstrue;// 下载成功System.out.println(文件下载成功ETagdownloadFileResult.getObjectMetadata().getETag());}catch(Throwablet){retryCount;System.err.println(文件下载失败重试次数retryCount);if(retryCountmaxRetryCount){thrownewException(文件下载失败超过最大重试次数);}}}// 关闭OSS客户端ossClient.shutdown();}}断点续传功能阿里云 OSS SDK 提供的断点续传会自动记录下载进度生成本地 .ossdownload 文件当下载中断或失败后SDK 可以从中断的地方继续下载。重试机制可以通过自定义重试逻辑实现对下载失败的重试操作。每次重试会基于上次中断处继续不需要从头开始下载。最大重试次数为了避免无限重试可以设置一个合理的最大重试次数例如网络条件不好时允许重试 3-5 次。在 Spring Boot 项目中通过阿里云 OSS 结合 CDN 可以实现大文件的加速访问。阿里云 OSS 提供了存储服务而 CDN内容分发网络通过将资源分发到全球的边缘节点减少延迟并提高访问速度。结合这两者用户可以快速、高效地访问存储在 OSS 上的大文件。

相关新闻

如何快速上手 Kibana 2:完整入门指南与实用技巧

如何快速上手 Kibana 2:完整入门指南与实用技巧

如何快速上手 Kibana 2:完整入门指南与实用技巧 【免费下载链接】kibana2 Kibana was acquired by Elastic in 2013. See elastic/kibana. More info at http://kibana.org 项目地址: https://gitcode.com/gh_mirrors/ki/kibana2 Kibana 2 是一款基于浏览器的…

2026/7/3 3:03:52 阅读更多 →
Unity Pico开发之环境搭建

Unity Pico开发之环境搭建

前言:本文主要讲述在Unity中搭建Pico的开发环境,偏个人记录向,有不正确/不专业的地方欢迎指出错误,也欢迎一起探讨问题。 项目制作完成后导出的apk文件实测在Pico neo3及Pico 4上都能运行。使用的Unity编辑器版本是2020.3.26f1c1…

2026/7/3 0:47:37 阅读更多 →
编程基础知识

编程基础知识

1.编译过程 一般汇编文件存在Listing文件夹中,目标文件存在Object文件夹中 具体原理问AI,网上的还不如ai的看了半天 2.CMSIS和STM32标准库 ARM公司是一家全球领先的半导体知识产权(IP)提供商,ARM公司不直接生产芯片,而是通过授权其处理器架构和设计给其他公司,如高通、…

2026/5/17 12:40:23 阅读更多 →

最新新闻

前端自动化测试:从jQuery到原生Web API的迁移与实践

前端自动化测试:从jQuery到原生Web API的迁移与实践

1. 项目概述:为什么需要摆脱jQuery进行自动化测试?如果你和我一样,是从那个“jQuery一统江湖”的年代走过来的前端开发者,那么你肯定对$()这种简洁的语法无比熟悉。它曾是我们操作DOM、处理事件、发起Ajax请求的瑞士军刀。然而&am…

2026/7/3 10:53:30 阅读更多 →
终极炉石传说插件:如何用HsMod提升300%游戏体验

终极炉石传说插件:如何用HsMod提升300%游戏体验

终极炉石传说插件:如何用HsMod提升300%游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 如果你是一位炉石传说玩家,是否厌倦了漫长的等待时间?是…

2026/7/3 10:53:30 阅读更多 →
如何优雅保存小红书内容:XHS-Downloader的完整解决方案

如何优雅保存小红书内容:XHS-Downloader的完整解决方案

如何优雅保存小红书内容:XHS-Downloader的完整解决方案 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&am…

2026/7/3 10:51:29 阅读更多 →
BetterNCM Installer:3分钟自动化插件安装的终极解决方案

BetterNCM Installer:3分钟自动化插件安装的终极解决方案

BetterNCM Installer:3分钟自动化插件安装的终极解决方案 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾经为了给网易云音乐安装插件而烦恼?面对繁琐的…

2026/7/3 10:51:29 阅读更多 →
3分钟极速指南:MetaTube插件为Jellyfin/Emby实现智能元数据刮削

3分钟极速指南:MetaTube插件为Jellyfin/Emby实现智能元数据刮削

3分钟极速指南:MetaTube插件为Jellyfin/Emby实现智能元数据刮削 【免费下载链接】jellyfin-plugin-metatube MetaTube Plugin for Jellyfin/Emby 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metatube MetaTube插件是Jellyfin和Emby媒体服…

2026/7/3 10:49:28 阅读更多 →
13DOF传感器与PIC18F24K50的自主定位导航方案

13DOF传感器与PIC18F24K50的自主定位导航方案

1. 项目概述:13DOF与PIC18F24K50的定位导航方案在嵌入式系统开发领域,高精度定位与导航一直是个极具挑战性的课题。传统方案往往需要依赖GPS等外部信号,不仅功耗高,在室内或复杂环境中还会出现信号丢失的问题。而采用13DOF&#x…

2026/7/3 10:47:27 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻