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

好听的建筑公司名字大全seo关键词排名查询

好听的建筑公司名字大全,seo关键词排名查询,深圳全网推互联科技有限公司,wordpress 标签作用应用场景 分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。 分片上传的场景…

应用场景

分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。

分片上传的场景

  • 大文件上传

  • 网络环境环境不好,存在需要重传风险的场景

分片上传的步骤

没有
前端上传文件的MD5值
判断是否上传过文件
创建文件存储用于存储分块
前端上传文件的MD5值和分块文件的序号
通过序号判断是否包含该分块
前端上传分块
存储分块
是否是最后一块
合并分块
返回文件的存储路径

检查文件的代码

在文件第一次上传时,上传文件的md5值,从而判断文件是否存在minio中

public Result<Boolean> checkFile(String fileMd5) {//正常做业务时应该先从数据库中查询//如果数据库存在再查询 minioGetObjectArgs getObjectArgs = GetObjectArgs.builder().bucket(bucketName)//                    todo 这里固定了文件的后缀,实际情况下应该从数据库开始查询,得到文件的路径.object(getFilePathByMd5(fileMd5,"png")).build();//查询远程服务获取到一个流对象try {FilterInputStream inputStream = minioClient.getObject(getObjectArgs);if(inputStream!=null){//文件已存在return Result.success(true);}} catch (Exception e) {e.printStackTrace();}//文件不存在return Result.success(false);}

检查分块的代码

检查分块是前端把需要上传的文件经过大小计算后,算出分块的数量,然后把循环发送文件的md5值和分块序号,然后在minio中检查对应文件夹下是否有对应的分块,如果检查到某一处没有对应的分块,便知道传输中断的位置。

 public Result<Boolean> checkChunk(String fileMd5, int chunkIndex) {//根据md5得到分块文件所在目录的路径String chunkFileFolderPath = getChunkFileFolderPath(fileMd5);//如果数据库存在再查询 minioGetObjectArgs getObjectArgs = GetObjectArgs.builder().bucket(bucketName).object(chunkFileFolderPath+chunkIndex).build();//查询远程服务获取到一个流对象try {FilterInputStream inputStream = minioClient.getObject(getObjectArgs);if(inputStream!=null){//文件已存在return Result.success(true);}} catch (Exception e) {e.printStackTrace();}//文件不存在return Result.success(false);}

上传分块的代码

    public Result uploadChunk(String fileMd5, int chunk, String localChunkFilePath) {//分块文件的路径String chunkFilePath = getChunkFileFolderPath(fileMd5) + chunk;//获取mimeTypeString mimeType = localChunkFilePath.substring(localChunkFilePath.lastIndexOf("."));//将分块文件上传到minioboolean b = addMediaFilesToMinIO(localChunkFilePath, mimeType, bucketName, chunkFilePath);if(!b){return Result.error("上传分块文件失败");}//上传成功return Result.success(true);}

合并分块的代码

合并分块文件之前,需要检查文件是否和源文件相同,我们通过把分块合并后取文件的md5值和传输过来的MD5值作比较,如果相同则证明传输正确,把合并后的文件存入minio中,并清除分块文件

public Result mergechunks(String fileMd5, int chunkTotal) {//分块文件所在目录String chunkFileFolderPath = getChunkFileFolderPath(fileMd5);//找到所有的分块文件List<ComposeSource> sources = Stream.iterate(0, i -> ++i).limit(chunkTotal).map(i -> ComposeSource.builder().bucket(bucketName).object(chunkFileFolderPath + i).build()).collect(Collectors.toList());//合并后文件的objectnameString objectName = getFilePathByMd5(fileMd5, "png");//指定合并后的objectName等信息ComposeObjectArgs composeObjectArgs = ComposeObjectArgs.builder().bucket(bucketName).object(objectName)//合并后的文件的objectname.sources(sources)//指定源文件.build();//===========合并文件============//报错size 1048576 must be greater than 5242880,minio默认的分块文件大小为5Mtry {minioClient.composeObject(composeObjectArgs);} catch (Exception e) {e.printStackTrace();log.error("合并文件出错,bucket:{},objectName:{},错误信息:{}",bucketName,objectName,e.getMessage());return Result.error("合并文件异常");}//===========校验合并后的和源文件是否一致,视频上传才成功===========//先下载合并后的文件File file = downloadFileFromMinIO(bucketName, objectName);try(FileInputStream fileInputStream = new FileInputStream(file)){//计算合并后文件的md5String mergeFile_md5 = DigestUtils.md5Hex(fileInputStream);//比较原始md5和合并后文件的md5if(!fileMd5.equals(mergeFile_md5)){log.error("校验合并文件md5值不一致,原始文件:{},合并文件:{}",fileMd5,mergeFile_md5);return Result.error("文件校验失败");}}catch (Exception e) {return Result.error("文件校验失败");}//==============将文件信息入库============
//        在做业务时要将得到的路径存入数据库//==========清理分块文件=========clearChunkFiles(chunkFileFolderPath,chunkTotal);return Result.success(true);}/*** 清除分块文件* @param chunkFileFolderPath 分块文件路径* @param chunkTotal 分块文件总数*/private void clearChunkFiles(String chunkFileFolderPath,int chunkTotal){Iterable<DeleteObject> objects =  Stream.iterate(0, i -> ++i).limit(chunkTotal).map(i -> new DeleteObject(chunkFileFolderPath+ i)).collect(Collectors.toList());;RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucketName).objects(objects).build();Iterable<io.minio.Result<DeleteError>> results = minioClient.removeObjects(removeObjectsArgs);//要想真正删除results.forEach(f->{try {DeleteError deleteError = f.get();} catch (Exception e) {e.printStackTrace();}});}
http://www.khdw.cn/news/43058.html

相关文章:

  • 网站开发各小组互评表客源软件哪个最好
  • 武汉电商网站开发网络推广软文范文
  • 外贸公司网站怎么做站长工具seo推广
  • 网络平台运营管理seo优化在哪里学
  • 苏州网络推广建网站网站seo策划方案实例
  • 点击图片是网站怎么做的在线代理浏览网站
  • 平台网站建设可行报告seo优化教程
  • 交互性强的网站推广联盟
  • 做网站需要注册公司吗软件培训班学费多少
  • 免费做爰小说网站天津疫情最新情况
  • 做网站成功热搜在哪里可以看
  • 深圳广科网站建设青岛网站建设方案
  • 自己做网站可以随便起名字吗网络营销seo优化
  • 长春 房地产网站建设seo1短视频网页入口营销
  • 嘉兴微信网站建设衡阳有实力seo优化
  • 工艺品网站建设开发企业网站建设方案策划书
  • 做特色创意菜品的网站描述建设一个网站的具体步骤
  • 网站文章可以做外链吗重庆公司seo
  • 网站seo推广员招聘国内专业的seo机构
  • 柳州网站建设22深圳白帽优化
  • ppt电子商务网站建设湖北百度推广公司
  • 怎样建立静态网站网站收录提交入口大全
  • 制作好的网站有哪些内容搜索seo
  • 郑州做网站优化的公司官网seo优化
  • 制作网站的走马灯怎么做黑马教育培训官网
  • 最新一键自助建站程序源码seo免费视频教程
  • 西宁的网站建设公司销售网站排名
  • 郑州品牌创意网站建设seo建站的步骤
  • 常德做网站报价windows优化大师怎么使用
  • 长春网站优化常识搜索排名竞价