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

免费咨询网站网站建设前期策划书

免费咨询网站,网站建设前期策划书,手机网站设计技巧,传媒公司营业执照文章目录 1. 引言2. 文件切片上传简介3. 技术选型3.1 Spring Boot3.2 MinIO 4. 搭建Spring Boot项目5. 集成MinIO5.1 配置MinIO连接信息5.2 MinIO配置类 6. 文件切片上传实现6.1 控制器层6.2 服务层6.3 文件切片上传逻辑 7. 文件合并逻辑8. 页面展示9. 性能优化与拓展9.1 性能优… 文章目录 1. 引言2. 文件切片上传简介3. 技术选型3.1 Spring Boot3.2 MinIO 4. 搭建Spring Boot项目5. 集成MinIO5.1 配置MinIO连接信息5.2 MinIO配置类 6. 文件切片上传实现6.1 控制器层6.2 服务层6.3 文件切片上传逻辑 7. 文件合并逻辑8. 页面展示9. 性能优化与拓展9.1 性能优化9.2 拓展功能 10. 总结 欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒✨博客主页IT·陈寒的博客该系列文章专栏SpringBoot其他专栏Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习文章作者技术和水平有限如果文中出现错误希望大家能指正 欢迎大家关注 ❤️ 1. 引言 在现代Web应用中文件上传是一个常见的需求尤其是对于大文件的上传如视频、音频或大型文档。为了提高用户体验和系统性能文件切片上传技术逐渐成为热门选择。本文将介绍如何使用Spring Boot和MinIO实现文件切片极速上传技术通过将大文件分割成小片段并并行上传显著提高文件上传速度。 2. 文件切片上传简介 文件切片上传是指将大文件分割成小的片段然后通过多个请求并行上传这些片段最终在服务器端将这些片段合并还原为完整的文件。这种方式有助于规避一些上传过程中的问题如网络不稳定、上传中断等并能提高上传速度。 3. 技术选型 3.1 Spring Boot Spring Boot是一个基于Spring框架的轻量级、快速开发的框架提供了许多开箱即用的功能适合构建现代化的Java应用。 3.2 MinIO MinIO是一款开源的对象存储服务器与Amazon S3兼容。它提供了高性能、高可用性的存储服务适用于大规模文件存储。 4. 搭建Spring Boot项目 首先我们需要搭建一个基本的Spring Boot项目。可以使用Spring Initializerhttps://start.spring.io/生成项目骨架选择相应的依赖如Web和Thymeleaf。 !-- pom.xml --dependencies!-- Spring Boot Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Thymeleaf模板引擎 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependency!-- MinIO Java客户端 --dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.3.3/version/dependency /dependencies5. 集成MinIO 5.1 配置MinIO连接信息 在application.properties中配置MinIO的连接信息包括服务地址、Access Key和Secret Key。 # application.properties# MinIO配置 minio.endpointhttp://localhost:9000 minio.accessKeyminioadmin minio.secretKeyminioadmin minio.bucketNamemybucket5.2 MinIO配置类 创建MinIO配置类用于初始化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.endpoint})private String endpoint;Value(${minio.accessKey})private String accessKey;Value(${minio.secretKey})private String secretKey;Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();} }6. 文件切片上传实现 6.1 控制器层 创建一个文件上传的控制器负责处理文件切片上传的请求。 import io.minio.MinioClient; import io.minio.errors.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException;RestController RequestMapping(/file) public class FileController {Autowiredprivate MinioClient minioClient;Value(${minio.bucketName})private String bucketName;PostMapping(/upload)public String upload(RequestParam(file) MultipartFile file) {// 实现文件切片上传逻辑// ...return Upload success!;} }6.2 服务层 创建文件上传服务类处理文件切片的具体上传逻辑。 import io.minio.MinioClient; import io.minio.errors.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile;import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException;Service public class FileService {Autowiredprivate MinioClient minioClient;Value(${minio.bucketName})private String bucketName;public void uploadFile(String objectName, MultipartFile file) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, NoResponseException, ErrorResponseException, InternalException, InvalidBucketNameException, XmlParserException, InvalidArgumentException {// 实现文件切片上传逻辑// ...} }6.3 文件切片上传逻辑 在服务层的uploadFile方法中实现文件切片上传逻辑。这里使用MinIO的putObject方法将文件切片上传至MinIO服务器。 import io.minio.PutObjectArgs; import io.minio.errors.*;import java.io.IOException; import java.io.InputStream; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException;public class FileService {// 省略其他代码...public void uploadFile(String objectName, MultipartFile file) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, NoResponseException, ErrorResponseException, InternalException, InvalidBucketNameException, XmlParserException, InvalidArgumentException {InputStream inputStream file.getInputStream();long size file.getSize();long chunkSize 5 * 1024 * 1024; // 每片大小5MBlong offset 0;while (offset size) {long currentChunkSize Math.min(chunkSize, size - offset);byte[] chunk new byte[(int) currentChunkSize];inputStream.read(chunk);minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream, currentChunkSize, -1).build());offset currentChunkSize;}inputStream.close();} }7. 文件合并逻辑 在文件上传完成后需要将所有的切片文件合并还原为完整的文件。在FileController中增加一个合并文件的接口。 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*;RestController RequestMapping(/file) public class FileController {// 省略其他代码...Autowiredprivate FileService fileService;PostMapping(/merge)public String merge(RequestParam String objectName) {try {fileService.mergeFile(objectName);return Merge success!;} catch (Exception e) {e.printStackTrace();return Merge failed!;}} }在FileService中增加合并文件的方法。 import io.minio.CopyObjectArgs; import io.minio.GetObjectArgs; import io.minio.PutObjectArgs; import io.minio.errors.*;import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException;public class FileService {// 省略其他代码...public void mergeFile(String objectName) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, NoResponseException, ErrorResponseException, InternalException, InvalidBucketNameException, XmlParserException, InvalidArgumentException {Iterableio.minio.messages.Item parts minioClient.listObjects(bucketName, objectName);// 通过CopyObject将所有分片合并成一个对象for (io.minio.messages.Item part : parts) {String partName part.objectName();minioClient.copyObject(CopyObjectArgs.builder().source(bucketName, partName).destination(bucketName, objectName).build());}// 删除所有分片for (io.minio.messages.Item part : parts) {String partName part.objectName();minioClient.removeObject(bucketName, partName);}} }8. 页面展示 在前端页面使用Thymeleaf模板引擎展示上传按钮和上传进度。 !DOCTYPE html html langen xmlns:thhttp://www.thymeleaf.org headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleFile Upload/title /head bodyform iduploadForm action/file/upload methodpost enctypemultipart/form-datainput typefile namefile idfile /input typesubmit valueUpload //formdiv idprogress styledisplay: none;progress idprogressBar max100 value0/progressspan idpercentage0%/span/divscriptdocument.getElementById(uploadForm).addEventListener(submit, function (event) {event.preventDefault();var fileInput document.getElementById(file);var file fileInput.files[0];if (!file) {alert(Please choose a file.);return;}var formData new FormData();formData.append(file, file);var xhr new XMLHttpRequest();xhr.open(POST, /file/upload, true);xhr.upload.onprogress function (e) {if (e.lengthComputable) {var percentage Math.round((e.loaded / e.total) * 100);document.getElementById(progressBar).value percentage;document.getElementById(percentage).innerText percentage %;}};xhr.onload function () {document.getElementById(progress).style.display none;alert(Upload success!);};xhr.onerror function () {alert(Upload failed!);};xhr.send(formData);document.getElementById(progress).style.display block;});/script /body /html9. 性能优化与拓展 9.1 性能优化 并发上传 利用多线程或异步任务将文件切片并行上传提高上传效率。分布式部署 将文件存储和应用部署在不同的服务器减轻单个服务器的负担提高整体性能。 9.2 拓展功能 断点续传 支持文件上传中断后的断点续传功能提高用户体验。权限控制 使用MinIO的访问策略进行权限控制确保文件上传安全性。 10. 总结 通过本文我们深入了解了如何使用Spring Boot和MinIO实现文件切片上传技术。通过文件切片上传我们能够提高文件上传的速度优化用户体验。在实际应用中我们可以根据需求进行性能优化和功能拓展使得文件上传系统更加强大和可靠。希望本文对您理解文件切片上传技术以及Spring Boot和MinIO的使用有所帮助。 var code f3609a34-26b9-4f92-90de-d5d00ceee6e0结尾 ❤️ 感谢您的支持和鼓励 您可能感兴趣的内容 【Java面试技巧】Java面试八股文 - 掌握面试必备知识目录篇【Java学习路线】2023年完整版Java学习路线图【AIGC人工智能】Chat GPT是什么初学者怎么使用Chat GPT需要注意些什么【Java实战项目】SpringBootSSM实战打造高效便捷的企业级Java外卖订购系统【数据结构学习】从零起步学习数据结构的完整路径
http://www.hkea.cn/news/14470088/

相关文章:

  • 知名建站企业哪家好做网站的公司怎么做业务
  • 网站运营与管理的内容有哪些中企动力算大厂吗
  • php和mysql做租车网站模板网站与定制开发网站的区别
  • 地税局网站建设情况汇报网站模板 免费下载
  • 垫江网站建设djrckj龙南网站建设
  • 百度快照优化网站2022中国企业排行榜
  • 96个html静态网站模板打包专教做美食的网站
  • 无锡阿里巴巴做网站正确的网址格式怎么写
  • 简洁游戏企业网站建设网站报告书
  • 广州企业网站模板购买做网上推广网站
  • 上海建筑设计公司网站万网续费登录网站
  • 如何创作网站同一个域名两个网站
  • 网站开发交互原型标注图什么是网站开发中的分页
  • 西安网站建设技术常见的渠道推广方式有哪些
  • 个人做论坛网站要什么证件sharepoint做门户网站
  • 美妆网站建设方案东莞服饰网站建设哪家好
  • 凡科删除建设的网站中国建设银行中国网站
  • 规划和布局营销型网站的四大重点长岛网站建设费用
  • 网站seo教程网页设计制作单位
  • h5页面制作网站官网招商网站建设服务商
  • 网站代运营方案网站被收录的过程
  • 厦门模板建站涡阳网站优化
  • 网站代理浏览器0wordpress 房产主题
  • 网页技术与网站开发分析报告东莞市塘厦网站建设
  • 返利的网站怎么做网站建设中期报告
  • 网站建设公司帮企业建站的目的销售管理系统实验报告
  • 小程序开发平台要多少钱公司网站怎么做优化
  • 常州建站服务网站建设实用教程
  • php mysql网站开发试题awordpress转化为中文版
  • 交易网站怎么做北京建设网站图片