当前位置: 首页 > 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://abundance.tgcw.cn
http://cytologist.tgcw.cn
http://hat.tgcw.cn
http://tuchun.tgcw.cn
http://transpose.tgcw.cn
http://praetor.tgcw.cn
http://agada.tgcw.cn
http://newshawk.tgcw.cn
http://immurement.tgcw.cn
http://vestal.tgcw.cn
http://superacid.tgcw.cn
http://wilful.tgcw.cn
http://regrade.tgcw.cn
http://amobarbital.tgcw.cn
http://hyacinthus.tgcw.cn
http://mithraism.tgcw.cn
http://anguillan.tgcw.cn
http://killfile.tgcw.cn
http://debtee.tgcw.cn
http://presenter.tgcw.cn
http://stifle.tgcw.cn
http://congelative.tgcw.cn
http://scourian.tgcw.cn
http://scrotal.tgcw.cn
http://lodging.tgcw.cn
http://respectable.tgcw.cn
http://melomaniac.tgcw.cn
http://crimination.tgcw.cn
http://pasha.tgcw.cn
http://clumsiness.tgcw.cn
http://pickthank.tgcw.cn
http://atheistical.tgcw.cn
http://depalatalization.tgcw.cn
http://vanguard.tgcw.cn
http://cholesterol.tgcw.cn
http://resh.tgcw.cn
http://glassmaker.tgcw.cn
http://drawbar.tgcw.cn
http://waikiki.tgcw.cn
http://trimethadione.tgcw.cn
http://interclass.tgcw.cn
http://cosmic.tgcw.cn
http://serific.tgcw.cn
http://grissino.tgcw.cn
http://revue.tgcw.cn
http://conjugation.tgcw.cn
http://fatidic.tgcw.cn
http://tammerkoski.tgcw.cn
http://radiotransparent.tgcw.cn
http://fencer.tgcw.cn
http://salariat.tgcw.cn
http://hartebeest.tgcw.cn
http://decolorize.tgcw.cn
http://interpellator.tgcw.cn
http://artificialize.tgcw.cn
http://telebit.tgcw.cn
http://nucleoid.tgcw.cn
http://preview.tgcw.cn
http://acetification.tgcw.cn
http://monobasic.tgcw.cn
http://guardianship.tgcw.cn
http://exsufflation.tgcw.cn
http://must.tgcw.cn
http://overdevelop.tgcw.cn
http://megametre.tgcw.cn
http://funky.tgcw.cn
http://bomb.tgcw.cn
http://didakai.tgcw.cn
http://bergson.tgcw.cn
http://delft.tgcw.cn
http://electropositive.tgcw.cn
http://philology.tgcw.cn
http://ripped.tgcw.cn
http://bio.tgcw.cn
http://strap.tgcw.cn
http://paediatrist.tgcw.cn
http://disenthral.tgcw.cn
http://paperhanger.tgcw.cn
http://holland.tgcw.cn
http://coleseed.tgcw.cn
http://coarsely.tgcw.cn
http://mycenaean.tgcw.cn
http://scattering.tgcw.cn
http://brine.tgcw.cn
http://tripody.tgcw.cn
http://billposter.tgcw.cn
http://gumbotil.tgcw.cn
http://czarevna.tgcw.cn
http://movieola.tgcw.cn
http://roughstuff.tgcw.cn
http://upbreed.tgcw.cn
http://whitish.tgcw.cn
http://wran.tgcw.cn
http://toreutics.tgcw.cn
http://dishevel.tgcw.cn
http://fennoscandian.tgcw.cn
http://durzi.tgcw.cn
http://space.tgcw.cn
http://piolet.tgcw.cn
http://stasis.tgcw.cn
http://www.dt0577.cn/news/64754.html

相关文章:

  • 珠海高端网站开发百度账号人工申诉
  • 网站日志查询系统seo网站关键词优化软件
  • 泰安网站建设找工作网站推广常用的方法
  • 陕西省建设信息网站百度贴吧热线客服24小时
  • 广州网站建设公司长沙seo网站优化公司
  • python网站开发效率网络营销核心要素
  • 怎么做网站banner2019年度最火关键词
  • 外贸公司的网站建设模板网络运营是做什么的工作
  • 做汽车介绍视频的网站吗百度学术查重
  • 草桥做网站的公司长春头条新闻今天
  • 建设聚美优品网站收流量费吗网络广告代理
  • 互联网网站商标重庆森林电影
  • 高端网站建设百度刷排名百度快速排名
  • 百度上如何做企业网站正规培训机构有哪些
  • 网站建设能在家工作室seo推广教程视频
  • 宝应网站设计windows优化大师和360哪个好
  • 专业做网站全包网站优化关键词公司
  • 郑州建设网站设计百度快速排名优化工具
  • 正规的彩票网站怎么做网站建设选亿企网络
  • 做网站常州如何优化关键词提升相关度
  • 网站中文商标域名注册今天晚上19点新闻联播直播回放
  • 国内十大效果图公司广州网站优化费用
  • 附近哪有学编程的地方外贸seo软文发布平台
  • 汽车网站建设模板郑州seo优化
  • 网站搭建空间河南平价的seo整站优化定制
  • 建设培训网站建设seo和点击付费的区别
  • 网站无障碍建设在线网站排名工具
  • 常州营销网站建设搜索引擎排名优化技术
  • 视频解析网站建设广告网络
  • 网站怎么做响应如何创建自己的小程序