From a43d773d9cd839cbed6212de1f9bd3b07d50f589 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Sat, 9 Jan 2021 16:59:18 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=20=E5=AE=9E=E7=8E=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=A8=A1=E5=9D=97=E5=92=8C=E6=96=87=E4=BB=B6=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/MediaController.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 flyfish-file/src/main/java/com/flyfish/framework/file/controller/MediaController.java diff --git a/flyfish-file/src/main/java/com/flyfish/framework/file/controller/MediaController.java b/flyfish-file/src/main/java/com/flyfish/framework/file/controller/MediaController.java new file mode 100644 index 0000000..5184781 --- /dev/null +++ b/flyfish-file/src/main/java/com/flyfish/framework/file/controller/MediaController.java @@ -0,0 +1,70 @@ +package com.flyfish.framework.file.controller; + +import com.flyfish.framework.bean.Result; +import com.flyfish.framework.file.config.UploadConfiguration; +import com.flyfish.framework.file.domain.Media; +import com.flyfish.framework.file.service.MediaService; +import com.flyfish.framework.file.utils.DownloadUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.codec.multipart.FilePart; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + + +/** + * 媒体上传 + * + * @author wangyu + */ +@RestController +@RequestMapping("/media") +public class MediaController { + + @Resource + private MediaService mediaService; + @Resource + private UploadConfiguration configuration; + + /** + * 上传媒体,支持多个同时上传 + * + * @param files 文件 + * @return 结果 + */ + @PostMapping("") + public Mono>> uploadMedia(@RequestPart("file") Flux files) { + return files.flatMap(part -> part.filename().endsWith("m3u8") || part.filename().endsWith("m3u") ? mediaService.slice(part) : mediaService.upload(part)) + .reduce(Result.accept(new ArrayList<>()), ((listResult, media) -> { + listResult.getData().add(media); + return listResult; + })); + } + + @GetMapping("/**") + public Mono downloadMedia(ServerHttpRequest request, ServerHttpResponse response) { + String path = StringUtils.substringAfter(request.getURI().getPath(), "/media"); + return DownloadUtils.download(configuration.getLocalPath() + path, response); + } + + /** + * 上传hls切片内容 + * + * @param files 文件们 + * @return 结果 + */ + @PostMapping("hls") + public Mono>> uploadHls(@RequestPart("file") Flux files) { + return files.flatMap(mediaService::slice) + .reduce(Result.accept(new ArrayList<>()), ((listResult, media) -> { + listResult.getData().add(media); + return listResult; + })); + } +}