设为首页 加入收藏

TOP

第2-3-8章 分片上传和分片合并的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss(七)
2023-07-25 21:33:57 】 浏览:101
Tags:2-3-8 文件存 储服务 -nginx/fastDFS/minio/ oss/ 牛云 oss
eturn */ @Override protected R<File> merge(List<java.io.File> files, String fileName, FileChunksMergeDTO fileChunksMergeDTO) throws Exception { MinioAutoConfigure.this.buildClient(fileServerProperties); Vector<InputStream> streams = new Vector<>(); //分片合并成功,需要封装File对象相关属性 File fileResult = new File(); for (java.io.File file : files) {//file对应的就是分片文件 streams.add(new FileInputStream(file)); new FileInputStream(file).available(); //删除当前分片 file.delete(); } //生成满足要求的objectName和url String objectName = doReName(fileName, fileResult); //sequenceInputStream直接使用只能获取第一个分片的数据,故先全部转成输出流再转成输入流 //存在问题: //1.本身这个实现就不优雅 //2.OutOfMemoryError: Java heap space,测试同时传三个几百M的文件会发生内存溢出 //目前是分片文件上传到服务器,再程序里合并后再上传到minio,下面提供了很多minio的工具类,可以改成分片文件上传到minio,利用minioClient合并文件,目前未实现 try (SequenceInputStream sequenceInputStream = new SequenceInputStream(streams.elements()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { byte[] bytes = new byte[sequenceInputStream.available()]; int len; while ((len = sequenceInputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, len); } byte[] outBytes = outputStream.toByteArray(); ByteBuffer buffer = ByteBuffer.wrap(outBytes); try (ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer.array())) { // 使用putObject上传一个文件到存储桶中 PutObjectArgs putObjectArgs = PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .contentType(fileChunksMergeDTO.getContextType()) .stream(inputStream, inputStream.available(), ObjectWriteArgs.MIN_MULTIPART_SIZE).build(); minioClient.putObject(putObjectArgs); } catch (Exception ex) { log.error("分片文件合并失败"); return R.fail("分片文件合并失败"); } } catch (Exception ex) { log.error("分片文件合并失败"); return R.fail("分片文件合并失败"); } return R.success(fileResult); } }

5.11.7 分片合并接口

接口文档:

在这里插入图片描述
在这里插入图片描述

在FileChunkController中提供分片合并方法,直接调用分片处理策略类完成分片合并操作:

@Autowired
private FileChunkStrategy fileChunkStrategy;//分片文件处理策略

/**
* 分片合并
* @param info
* @return
*/
@ApiOperation(value = "分片合并", notes = "所有分片上传成功后,调用该接口对分片进行合并")
@PostMapping(value = "/merge")
public R<File> saveChunksMerge(FileChunksMergeDTO info) {
    log.info("info={}", info);

    return fileChunkStrategy.chunksMerge(info);
}

第2-1-2章 传统方式安装FastDFS-附FastDFS常用命令
第2-1-3章 docker-compose安装FastDFS,实现文件存储服务
第2-1-5章 docker安装MinIO实现文件存储服务-springboot整合minio-minio全网最全的资料

全套代码及资料全部完整提供,点此处下载

首页 上一页 4 5 6 7 下一页 尾页 7/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇向下递归以及向上递归 下一篇设计模式之单例设计模式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目