FileUploadController.java 39.1 KB
Newer Older
liqin's avatar
liqin committed
1
package cn.chnmuseum.party.web.controller;
liqin's avatar
liqin committed
2

liqin's avatar
liqin committed
3
import cn.chnmuseum.party.common.dfs.FastDFSUtils;
liqin's avatar
liqin committed
4 5 6 7
import cn.chnmuseum.party.common.enums.FileCatEnum;
import cn.chnmuseum.party.common.enums.FileTypeEnum;
import cn.chnmuseum.party.common.enums.HANDLE_STATUS_ENUM;
import cn.chnmuseum.party.common.enums.LanguageEnum;
liqin's avatar
liqin committed
8 9 10 11 12 13 14 15
import cn.chnmuseum.party.common.util.LCSUtil;
import cn.chnmuseum.party.common.util.TimeUtils;
import cn.chnmuseum.party.common.video.VideoEncryptUtil;
import cn.chnmuseum.party.common.vo.BatchUploadResVO;
import cn.chnmuseum.party.common.vo.ImageUploadResult;
import cn.chnmuseum.party.model.Asset;
import cn.chnmuseum.party.service.AssetService;
import cn.chnmuseum.party.web.controller.base.BaseController;
liqin's avatar
liqin committed
16
import cn.hutool.core.util.ArrayUtil;
liqin's avatar
liqin committed
17
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
liqin's avatar
liqin committed
18 19
import com.github.tobato.fastdfs.domain.fdfs.FileInfo;
import com.github.tobato.fastdfs.domain.fdfs.MetaData;
liqin's avatar
liqin committed
20
import io.swagger.annotations.Api;
liqin's avatar
liqin committed
21 22 23 24 25
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
liqin's avatar
liqin committed
26
import org.apache.commons.io.IOUtils;
liqin's avatar
liqin committed
27
import org.apache.commons.lang3.StringUtils;
wzp's avatar
wzp committed
28
import org.apache.shiro.authz.annotation.RequiresAuthentication;
liqin's avatar
liqin committed
29
import org.springframework.context.annotation.Scope;
liqin's avatar
liqin committed
30 31 32 33
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

liqin's avatar
liqin committed
34
import javax.annotation.Resource;
liqin's avatar
liqin committed
35 36
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
liqin's avatar
liqin committed
37
import java.io.IOException;
liqin's avatar
liqin committed
38
import java.time.LocalDateTime;
liqin's avatar
liqin committed
39
import java.util.*;
liqin's avatar
liqin committed
40 41 42 43 44 45 46 47 48 49 50 51

/**
 * <p>
 * 文件上传 前端控制器
 * </p>
 *
 * @author Danny Lee
 * @since 2021-03-16
 */
@Slf4j
@RestController
@RequestMapping("/file")
liqin's avatar
liqin committed
52
@Api(tags = {"文件上传接口"})
liqin's avatar
liqin committed
53
@Scope("prototype")
liqin's avatar
liqin committed
54
public class FileUploadController extends BaseController {
liqin's avatar
liqin committed
55 56

    private static final String[] IMAGE_TYPE = new String[]{"JPG", "JPEG", "PNG", "BMP", "WBMP"};
liqin's avatar
liqin committed
57
    private static final String[] AUDIO_TYPE = new String[]{"MP3", "AAC", "WMA", "FLAC", "RM", "OGG"};
58 59
//    private static final String[] VIDEO_TYPE = new String[]{"MP4", "FLV", "MPEG", "MPG", "MOV"};
    //按照王亭亭提的BUG要求 修改视频界面的提示信息改为只支持MP4、flv、mov
60
    private static final String[] VIDEO_TYPE = new String[]{"MP4", "FLV","OGG","WEBM", "MOV"};
liqin's avatar
liqin committed
61
    private static final String[] DOC_TYPE = new String[]{"PDF", "DOC", "DOCX", "PPT", "PPTX"};
liqin's avatar
liqin committed
62 63 64 65
    private static final char[] SPLITTER_CHAR_2 = new char[]{'@', '#'};
    private static final char[] SPLITTER_CHAR_3 = new char[]{'@', '#', '$'};
    private static final char[] SPLITTER_CHAR_4 = new char[]{'@', '#', '$', '%'};
    private static final char[] SPLITTER_CHAR_5 = new char[]{'@', '#', '$', '%', '&'};
liqin's avatar
liqin committed
66
    private static final String[] DATUM_TYPE = ArrayUtil.addAll(DOC_TYPE, IMAGE_TYPE, VIDEO_TYPE);
liqin's avatar
liqin committed
67

liqin's avatar
liqin committed
68 69 70 71 72
    @Resource
    private AssetService assetService;

    @ApiOperation(value = "根据文件ID刪除文件", notes = "根据文件ID刪除文件")
    @DeleteMapping(value = "/delete/{id}")
wzp's avatar
wzp committed
73
    @RequiresAuthentication  //@RequiresPermissions("file:delete")
liqin's avatar
liqin committed
74
    public Map<String, Object> delete(@PathVariable(value = "id") String id) {
liqin's avatar
liqin committed
75 76 77
        final Asset asset = assetService.getById(id);
        if (asset != null) {
            final String fileUrl = asset.getFileUrl();
liqin's avatar
liqin committed
78
            final String fileUrlCrypto = asset.getFileUrlCrypto();
liqin's avatar
liqin committed
79 80
            try {
                FastDFSUtils.deleteFile(fileUrl);
liqin's avatar
liqin committed
81
                FastDFSUtils.deleteFile(fileUrlCrypto);
liqin's avatar
liqin committed
82
            } catch (Throwable e) {
liqin's avatar
liqin committed
83
                this.assetService.removeById(id);
liqin's avatar
liqin committed
84
                return getResult("文件已被删除");
liqin's avatar
liqin committed
85
            }
liqin's avatar
liqin committed
86
            this.assetService.removeById(id);
liqin's avatar
liqin committed
87
            return getSuccessResult();
liqin's avatar
liqin committed
88
        }
liqin's avatar
liqin committed
89
        return getResult("文件已被删除");
liqin's avatar
liqin committed
90
    }
liqin's avatar
liqin committed
91

liqin's avatar
liqin committed
92
    @ApiImplicitParams({
liqin's avatar
liqin committed
93
            @ApiImplicitParam(name = "file", value = "资料", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true)
liqin's avatar
liqin committed
94
    })
liqin's avatar
liqin committed
95
    @PostMapping(value = "/datum/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
liqin's avatar
liqin committed
96
    @ApiOperation(value = "展板资料上传", notes = "展板资料上传")
liqin's avatar
liqin committed
97
    public Map<String, Object> uploadDatum(@RequestPart(value = "file", required = false) MultipartFile[] files) throws IOException {
liqin's avatar
liqin committed
98 99
        if (files == null || files.length == 0) {
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
100 101 102 103 104
        }
        int successCount = 0;
        int failureCount = 0;
        List<BatchUploadResVO.HandleResult> handleList = new ArrayList<>();

liqin's avatar
liqin committed
105
        Set<Asset> datumUrlList = new LinkedHashSet<>();
liqin's avatar
liqin committed
106 107 108 109 110 111 112 113 114 115 116
        for (MultipartFile file : files) {
            // 当前维度表下线结果
            BatchUploadResVO.HandleResult handleResult = new BatchUploadResVO.HandleResult();
            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            if (StringUtils.isBlank(originalFilename)) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
                handleResult.setDescription("文件名为空");
                failureCount++;
liqin's avatar
liqin committed
117
                handleList.add(handleResult);
liqin's avatar
liqin committed
118 119
                continue;
            }
liqin's avatar
liqin committed
120 121 122 123
            if (file.getSize() == 0L) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
liqin's avatar
liqin committed
124
                handleResult.setDescription("文件" + originalFilename + "大小为0");
liqin's avatar
liqin committed
125
                failureCount++;
liqin's avatar
liqin committed
126
                handleList.add(handleResult);
liqin's avatar
liqin committed
127 128
                continue;
            }
liqin's avatar
liqin committed
129

liqin's avatar
liqin committed
130
            String baseName = FilenameUtils.getBaseName(originalFilename);
liqin's avatar
liqin committed
131
            String extName = FilenameUtils.getExtension(originalFilename);
liqin's avatar
liqin committed
132 133
            String finalExtName = extName;
            boolean anyMatch = Arrays.stream(DATUM_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()));
liqin's avatar
liqin committed
134
            if (anyMatch) {
liqin's avatar
liqin committed
135
                if ("MPEG".equals(extName.toUpperCase()) || "MOV".equals(extName.toUpperCase())) {
liqin's avatar
liqin committed
136 137 138
                    extName = "mp4";
                    originalFilename = FilenameUtils.getBaseName(originalFilename) + "." + extName;
                }
liqin's avatar
liqin committed
139 140 141 142 143 144
                final Asset asset = Asset.builder()
                        .fileName(originalFilename)
                        .fileExtName(extName)
                        .fileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name())
                        .build();

liqin's avatar
liqin committed
145
                String language = null;
liqin's avatar
liqin committed
146 147
                final Set<MetaData> metaDataSet = new HashSet<>();
                metaDataSet.add(new MetaData("fileName", originalFilename));
liqin's avatar
liqin committed
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
                if (originalFilename.contains("汉语")) {
                    metaDataSet.add(new MetaData("language", LanguageEnum.ZH.name()));
                    language = LanguageEnum.ZH.name();
                } else if (originalFilename.contains("英语")) {
                    metaDataSet.add(new MetaData("language", LanguageEnum.EN.name()));
                    language = LanguageEnum.EN.name();
                } else if (originalFilename.contains("蒙语")) {
                    metaDataSet.add(new MetaData("language", LanguageEnum.MN.name()));
                    language = LanguageEnum.MN.name();
                } else if (originalFilename.contains("藏语")) {
                    metaDataSet.add(new MetaData("language", LanguageEnum.BO.name()));
                    language = LanguageEnum.BO.name();
                } else if (originalFilename.contains("维吾尔语")) {
                    metaDataSet.add(new MetaData("language", LanguageEnum.UYG.name()));
                    language = LanguageEnum.UYG.name();
                }

                String fileUrl = null;
                String fileUrlCrypto = null;
liqin's avatar
liqin committed
167
                if (Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
liqin's avatar
liqin committed
168 169 170
                    metaDataSet.add(new MetaData("fileType", FileTypeEnum.VIDEO.name()));
                    handleResult.setFileType(FileTypeEnum.VIDEO.name());
                    asset.setFileType(FileTypeEnum.VIDEO.name());
liqin's avatar
liqin committed
171 172 173 174

                    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    IOUtils.copy(file.getInputStream(), byteArrayOutputStream);
                    fileUrl = FastDFSUtils.uploadVideo(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), file.getSize(), originalFilename, metaDataSet);
liqin's avatar
liqin committed
175
                    metaDataSet.removeIf(x -> "MD5".equals(x.getName()));
liqin's avatar
liqin committed
176 177 178
                    metaDataSet.add(new MetaData("fileName", baseName + ".chnmuseum"));
                    fileUrlCrypto = FastDFSUtils.uploadVideo(VideoEncryptUtil.encrypt(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), VideoEncryptUtil.cipher), file.getSize(), baseName + ".chnmuseum", metaDataSet);
                    final Set<MetaData> fileMetaData = FastDFSUtils.getFileMetaData(fileUrlCrypto);
liqin's avatar
liqin committed
179 180
                    String md5 = fileMetaData.stream().filter(x -> "MD5".equals(x.getName())).map(MetaData::getValue).findFirst().get();
                    asset.setMd5(md5);
liqin's avatar
liqin committed
181
                    asset.setIntro(Base64.getEncoder().encodeToString(fileUrl.getBytes()));
liqin's avatar
liqin committed
182 183
                    asset.setFileNameCrypto(md5 + ".chnmuseum");
                    asset.setFileUrlCrypto(fileUrlCrypto);
184
                    asset.setFileUrl(fileUrl);        //mall/learningContent/get   这个接口返回的 fileUrl 是空字符安串    BUG修改
liqin's avatar
liqin committed
185
                } else if (Arrays.stream(AUDIO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
liqin's avatar
liqin committed
186 187 188 189
                    metaDataSet.add(new MetaData("fileType", FileTypeEnum.AUDIO.name()));
                    handleResult.setFileType(FileTypeEnum.AUDIO.name());
                    asset.setFileType(FileTypeEnum.AUDIO.name());
                    fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
liqin's avatar
liqin committed
190
                    asset.setFileUrl(fileUrl);
liqin's avatar
liqin committed
191
                } else if (Arrays.stream(IMAGE_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
liqin's avatar
liqin committed
192 193 194 195 196
                    metaDataSet.add(new MetaData("fileType", FileTypeEnum.IMAGE.name()));
                    handleResult.setFileType(FileTypeEnum.IMAGE.name());
                    asset.setFileType(FileTypeEnum.IMAGE.name());
                    fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
                    asset.setThumbnail(fileUrl);
liqin's avatar
liqin committed
197
                    asset.setFileUrl(fileUrl);
liqin's avatar
liqin committed
198
                } else if (Arrays.stream(DOC_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
liqin's avatar
liqin committed
199 200 201 202
                    metaDataSet.add(new MetaData("fileType", FileTypeEnum.DOCUMENT.name()));
                    handleResult.setFileType(FileTypeEnum.DOCUMENT.name());
                    asset.setFileType(FileTypeEnum.DOCUMENT.name());
                    fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
liqin's avatar
liqin committed
203
                    asset.setFileUrl(fileUrl);
liqin's avatar
liqin committed
204
                }
liqin's avatar
liqin committed
205
                final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
liqin's avatar
liqin committed
206
                final LocalDateTime createTime = TimeUtils.getDateTimeOfTimestamp(fileInfo.getCreateTime() * 1000);
liqin's avatar
liqin committed
207 208
                asset.setFileSize(fileInfo.getFileSize());
                asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name());
liqin's avatar
liqin committed
209
                asset.setLanguage(language);
liqin's avatar
liqin committed
210 211
                asset.setCreateTime(createTime);
                asset.setUpdateTime(createTime);
liqin's avatar
liqin committed
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
                if (Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
                    final int crc32 = fileInfo.getCrc32();
                    final Asset one = this.assetService.getOne(Wrappers.<Asset>lambdaQuery().eq(Asset::getCrc32, (long) crc32).last(" limit 1"));
                    asset.setCrc32((long) crc32);
                    if (one != null) {
                        try {
                            FastDFSUtils.deleteFile(fileUrl);
                            FastDFSUtils.deleteFile(fileUrlCrypto);
                        } catch (Throwable ignored) {
                        }
                        asset.setIntro(one.getIntro());
                        asset.setFileUrlCrypto(one.getFileUrlCrypto());
                        asset.setFileNameCrypto(one.getFileNameCrypto());
                        asset.setMd5(one.getMd5());
                        asset.setCrc32(one.getCrc32());
227
                        asset.setFileUrl(one.getFileUrl());
liqin's avatar
liqin committed
228
                    }
liqin's avatar
liqin committed
229
                }
liqin's avatar
liqin committed
230 231 232
                this.assetService.save(asset);
                datumUrlList.add(asset);

liqin's avatar
liqin committed
233
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
234 235 236
                handleResult.setFileName(originalFilename);
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
                handleResult.setDescription("");
liqin's avatar
liqin committed
237 238 239
                successCount++;
            } else {
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
240
                handleResult.setDescription("文件" + originalFilename + "格式不支持");
liqin's avatar
liqin committed
241 242 243 244 245 246 247 248 249 250
                failureCount++;
            }
            // 设置处理的业务表信息
            handleList.add(handleResult);
        }
        BatchUploadResVO batchUploadResVO = new BatchUploadResVO();
        batchUploadResVO.setFailureCount(failureCount);
        batchUploadResVO.setSuccessCount(successCount);
        batchUploadResVO.setTotal(files.length);
        batchUploadResVO.setHandleList(handleList);
liqin's avatar
liqin committed
251
        batchUploadResVO.setFileList(datumUrlList);
liqin's avatar
liqin committed
252 253 254 255

        if (failureCount > 0) {
            return getFailResult(batchUploadResVO);
        }
liqin's avatar
liqin committed
256
        return getResult(batchUploadResVO);
liqin's avatar
liqin committed
257 258 259
    }

    @PostMapping(value = "/image/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
wzp's avatar
wzp committed
260
    @RequiresAuthentication  //@RequiresPermissions("file:image:upload")
liqin's avatar
liqin committed
261
    @ApiOperation(value = "单图片上传(封面/缩略图)", notes = "单图片上传(封面/缩略图)")
liqin's avatar
liqin committed
262
    public Map<String, Object> uploadImage(@RequestParam(value = "file") MultipartFile uploadFile) throws Exception {
liqin's avatar
liqin committed
263 264
        if (uploadFile == null) {
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
265 266 267 268
        }
        String fileName = uploadFile.getOriginalFilename();
        String extension = FilenameUtils.getExtension(fileName);
        if (StringUtils.isBlank(extension)) {
liqin's avatar
liqin committed
269
            return getFailResult("文件格式不支持");
liqin's avatar
liqin committed
270 271 272
        }
        boolean anyMatch = Arrays.stream(IMAGE_TYPE).anyMatch(s -> Objects.equals(s, extension.toUpperCase()));
        if (!anyMatch) {
liqin's avatar
liqin committed
273
            return getFailResult("文件格式不支持");
liqin's avatar
liqin committed
274 275
        }

liqin's avatar
liqin committed
276 277 278 279
        final Set<MetaData> metaDataSet = new HashSet<>();
        metaDataSet.add(new MetaData("fileName", fileName));
        metaDataSet.add(new MetaData("fileType", FileTypeEnum.IMAGE.name()));
        String url = FastDFSUtils.uploadFile(uploadFile.getInputStream(), uploadFile.getSize(), fileName, metaDataSet);
liqin's avatar
liqin committed
280 281 282 283 284
        ImageUploadResult imageUploadResult = new ImageUploadResult();
        imageUploadResult.setFileName(fileName);
        imageUploadResult.setFileExtName(extension);
        imageUploadResult.setFileSize(uploadFile.getSize());
        imageUploadResult.setUrl(url);
liqin's avatar
liqin committed
285
        return getResult(imageUploadResult);
liqin's avatar
liqin committed
286 287
    }

288
    @PostMapping(value = "/upload/allType", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
wzp's avatar
wzp committed
289
    @RequiresAuthentication  //@RequiresPermissions("file:upload:allType")
290
    @ApiOperation(value = "单文件上传(不限格式)", notes = "单文件上传(不限格式)")
liqin's avatar
liqin committed
291
    public Map<String, Object> uploadAllType(@RequestParam(value = "file") MultipartFile uploadFile) throws Exception {
liqin's avatar
liqin committed
292 293
        if (uploadFile == null) {
            return getFailResult("没有文件可供上传");
294 295 296 297
        }
        String fileName = uploadFile.getOriginalFilename();
        String extension = FilenameUtils.getExtension(fileName);
        if (StringUtils.isBlank(extension)) {
liqin's avatar
liqin committed
298
            return getFailResult("文件格式不支持");
299
        }
liqin's avatar
liqin committed
300 301 302
        final Set<MetaData> metaDataSet = new HashSet<>();
        metaDataSet.add(new MetaData("fileName", fileName));
        String url = FastDFSUtils.uploadFile(uploadFile.getInputStream(), uploadFile.getSize(), fileName, metaDataSet);
303 304 305 306 307
        ImageUploadResult imageUploadResult = new ImageUploadResult();
        imageUploadResult.setFileName(fileName);
        imageUploadResult.setFileExtName(extension);
        imageUploadResult.setFileSize(uploadFile.getSize());
        imageUploadResult.setUrl(url);
liqin's avatar
liqin committed
308
        return getResult(imageUploadResult);
309 310
    }

liqin's avatar
liqin committed
311 312 313 314
    @ApiImplicitParams({
            @ApiImplicitParam(name = "file", value = "音频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true)
    })
    @PostMapping(value = "/audio/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
wzp's avatar
wzp committed
315
    @RequiresAuthentication  //@RequiresPermissions("audio:upload")
liqin's avatar
liqin committed
316
    @ApiOperation(value = "展板多音频上传", notes = "展板多音频上传")
liqin's avatar
liqin committed
317
    public Map<String, Object> uploadAudio(@RequestPart(value = "file", required = false) MultipartFile[] files) throws IOException {
wzp's avatar
wzp committed
318
        if (files == null || files.length == 0) {
liqin's avatar
liqin committed
319
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
320 321 322
        }
        final boolean existChineseAudio = Arrays.stream(files).anyMatch(s -> Objects.requireNonNull(s.getOriginalFilename()).contains("汉语"));
        if (!existChineseAudio) {
liqin's avatar
liqin committed
323
            return getFailResult("必须包含汉语音频");
liqin's avatar
liqin committed
324 325 326 327 328 329
        }

        int successCount = 0;
        int failureCount = 0;
        List<BatchUploadResVO.HandleResult> handleList = new ArrayList<>();

liqin's avatar
liqin committed
330
        Set<Asset> fileList = new LinkedHashSet<>();
liqin's avatar
liqin committed
331 332 333 334 335 336 337 338 339 340 341 342
        for (MultipartFile file : files) {
            // 当前维度表下线结果
            BatchUploadResVO.HandleResult handleResult = new BatchUploadResVO.HandleResult();
            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            if (StringUtils.isBlank(originalFilename)) {
                handleResult.setFileName("");
                handleResult.setFileType(FileTypeEnum.AUDIO.getName());
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
                handleResult.setDescription("文件名为空");
                failureCount++;
liqin's avatar
liqin committed
343
                handleList.add(handleResult);
liqin's avatar
liqin committed
344 345
                continue;
            }
liqin's avatar
liqin committed
346 347 348 349
            if (file.getSize() == 0L) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
liqin's avatar
liqin committed
350
                handleResult.setDescription("文件" + originalFilename + "大小为0");
liqin's avatar
liqin committed
351
                failureCount++;
liqin's avatar
liqin committed
352
                handleList.add(handleResult);
liqin's avatar
liqin committed
353 354
                continue;
            }
liqin's avatar
liqin committed
355

liqin's avatar
liqin committed
356 357
            String extName = FilenameUtils.getExtension(originalFilename);
            boolean anyMatch = Arrays.stream(AUDIO_TYPE).anyMatch(s -> Objects.equals(s, extName.toUpperCase()));
liqin's avatar
liqin committed
358
            if (anyMatch) {
liqin's avatar
liqin committed
359 360 361 362 363
                String language = null;
                final Set<MetaData> metaDataSet = new HashSet<>();
                metaDataSet.add(new MetaData("fileName", originalFilename));
                metaDataSet.add(new MetaData("fileType", FileTypeEnum.AUDIO.name()));
                if (originalFilename.contains("汉语")) {
liqin's avatar
liqin committed
364 365
                    metaDataSet.add(new MetaData("language", LanguageEnum.ZH.name()));
                    language = LanguageEnum.ZH.name();
liqin's avatar
liqin committed
366
                } else if (originalFilename.contains("英语")) {
liqin's avatar
liqin committed
367 368
                    metaDataSet.add(new MetaData("language", LanguageEnum.EN.name()));
                    language = LanguageEnum.EN.name();
liqin's avatar
liqin committed
369
                } else if (originalFilename.contains("蒙语")) {
liqin's avatar
liqin committed
370 371
                    metaDataSet.add(new MetaData("language", LanguageEnum.MN.name()));
                    language = LanguageEnum.MN.name();
liqin's avatar
liqin committed
372
                } else if (originalFilename.contains("藏语")) {
liqin's avatar
liqin committed
373 374
                    metaDataSet.add(new MetaData("language", LanguageEnum.BO.name()));
                    language = LanguageEnum.BO.name();
liqin's avatar
liqin committed
375
                } else if (originalFilename.contains("维吾尔语")) {
liqin's avatar
liqin committed
376 377
                    metaDataSet.add(new MetaData("language", LanguageEnum.UYG.name()));
                    language = LanguageEnum.UYG.name();
liqin's avatar
liqin committed
378 379 380
                }
                String fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
                final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
liqin's avatar
liqin committed
381
                final int crc32 = fileInfo.getCrc32();
liqin's avatar
liqin committed
382
                final Asset one = this.assetService.getOne(Wrappers.<Asset>lambdaQuery().eq(Asset::getCrc32, (long) crc32).last(" limit 1"));
liqin's avatar
liqin committed
383
                final LocalDateTime createTime = TimeUtils.getDateTimeOfTimestamp(fileInfo.getCreateTime() * 1000);
liqin's avatar
liqin committed
384 385 386 387 388 389 390 391 392
                final long fileSize = fileInfo.getFileSize();
                final Asset asset = Asset.builder()
                        .fileName(originalFilename)
                        .fileExtName(extName)
                        .fileType(FileTypeEnum.AUDIO.name())
                        .fileUrl(fileUrl)
                        .fileSize(fileSize)
                        .fileCat(FileCatEnum.EXHIBITION_BOARD_AUDIO.name())
                        .language(language)
liqin's avatar
liqin committed
393
                        .crc32((long) crc32)
liqin's avatar
liqin committed
394 395 396
                        .createTime(createTime)
                        .updateTime(createTime)
                        .build();
liqin's avatar
liqin committed
397 398 399
                if (one != null) {
                    FastDFSUtils.deleteFile(fileUrl);
                    asset.setFileUrl(one.getFileUrl());
liqin's avatar
liqin committed
400
                    asset.setCrc32(one.getCrc32());
liqin's avatar
liqin committed
401
                }
liqin's avatar
liqin committed
402
                this.assetService.save(asset);
liqin's avatar
liqin committed
403
                fileList.add(asset);
liqin's avatar
liqin committed
404 405 406 407 408 409

                handleResult.setFileUrl(fileUrl);
                handleResult.setFileName(originalFilename);
                handleResult.setFileType(FileTypeEnum.AUDIO.getName());
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
                handleResult.setDescription("");
liqin's avatar
liqin committed
410 411 412
                successCount++;
            } else {
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
413 414 415
                handleResult.setFileType(FileTypeEnum.AUDIO.getName());
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
                handleResult.setDescription("文件" + originalFilename + "格式不支持");
liqin's avatar
liqin committed
416 417 418 419 420 421 422 423 424 425 426
                failureCount++;
            }
            // 设置处理的业务表信息
            handleList.add(handleResult);
        }

        BatchUploadResVO batchUploadResVO = new BatchUploadResVO();
        batchUploadResVO.setFailureCount(failureCount);
        batchUploadResVO.setSuccessCount(successCount);
        batchUploadResVO.setTotal(files.length);
        batchUploadResVO.setHandleList(handleList);
liqin's avatar
liqin committed
427
        batchUploadResVO.setFileList(fileList);
liqin's avatar
liqin committed
428
        return getResult(batchUploadResVO);
liqin's avatar
liqin committed
429 430
    }

liqin's avatar
liqin committed
431
    @ApiImplicitParams({
liqin's avatar
liqin committed
432
            @ApiImplicitParam(name = "file", value = "视频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true, required = true)
liqin's avatar
liqin committed
433
    })
liqin's avatar
liqin committed
434
    @PostMapping(value = "/video/content/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
wzp's avatar
wzp committed
435
    @RequiresAuthentication  //@RequiresPermissions("file:video:content:upload")
liqin's avatar
liqin committed
436
    @ApiOperation(value = "展板视频上传", notes = "展板视频上传")
liqin's avatar
liqin committed
437
    public Map<String, Object> uploadContentVideo(@RequestPart("file") MultipartFile[] files) throws Exception {
liqin's avatar
liqin committed
438
        if (files == null || files.length == 0) {
liqin's avatar
liqin committed
439
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
440
        }
liqin's avatar
liqin committed
441 442 443 444
        if (files.length == 1) {
            String extName = FilenameUtils.getExtension(files[0].getOriginalFilename());
            boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, extName.toUpperCase()));
            if (!anyMatch) {
445 446
//                return getFailResult("目前仅支持" + String.join("、", VIDEO_TYPE) + "格式");
                return getFailResult("支持h264编码的MP4视频、VP8编码的webm视频和Theora编码的ogg视频");
liqin's avatar
liqin committed
447 448
            }
        }
liqin's avatar
liqin committed
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481
        String videoContentName = null;
        String text;
        LCSUtil strie = null;
        final String[] fileBaseNameArray = Arrays.stream(files).map(x -> FilenameUtils.getBaseName(x.getOriginalFilename())).toArray(String[]::new);
        switch (fileBaseNameArray.length) {
            case 1:
                videoContentName = fileBaseNameArray[0];
                break;
            case 2:
                text = fileBaseNameArray[0] + SPLITTER_CHAR_2[0] + fileBaseNameArray[1] + SPLITTER_CHAR_2[1];
                strie = new LCSUtil(text, SPLITTER_CHAR_2);
                break;
            case 3:
                text = fileBaseNameArray[0] + SPLITTER_CHAR_3[0] + fileBaseNameArray[1] + SPLITTER_CHAR_3[1] + fileBaseNameArray[2] + SPLITTER_CHAR_3[2];
                strie = new LCSUtil(text, SPLITTER_CHAR_3);
                break;
            case 4:
                text = fileBaseNameArray[0] + SPLITTER_CHAR_4[0] + fileBaseNameArray[1] + SPLITTER_CHAR_4[1] + fileBaseNameArray[2] + SPLITTER_CHAR_4[2] + fileBaseNameArray[3] + SPLITTER_CHAR_4[3];
                strie = new LCSUtil(text, SPLITTER_CHAR_4);
                break;
            case 5:
                text = fileBaseNameArray[0] + SPLITTER_CHAR_5[0] + fileBaseNameArray[1] + SPLITTER_CHAR_5[1] + fileBaseNameArray[2] + SPLITTER_CHAR_5[2] + fileBaseNameArray[3] + SPLITTER_CHAR_5[3] + fileBaseNameArray[4] + SPLITTER_CHAR_5[4];
                strie = new LCSUtil(text, SPLITTER_CHAR_5);
                break;
            default:
                break;
        }
        if (strie != null) {
            strie.buildSuffixTree();
            videoContentName = strie.findLCS();
            if (StringUtils.isBlank(videoContentName)) {
                return getFailResult("请修改你的文件名并保持前缀一致后再上传");
            } else {
liqin's avatar
liqin committed
482 483 484 485 486 487 488 489 490
                videoContentName = videoContentName.trim();
                videoContentName = StringUtils.removeEnd(videoContentName, "{");
                videoContentName = StringUtils.removeEnd(videoContentName, "[");
                videoContentName = StringUtils.removeEnd(videoContentName, "【");
                videoContentName = StringUtils.removeEnd(videoContentName, "(");
                videoContentName = StringUtils.removeEnd(videoContentName, "(");
                videoContentName = StringUtils.removeEnd(videoContentName, "-");
                videoContentName = StringUtils.removeEnd(videoContentName, "_");
                videoContentName = StringUtils.removeEnd(videoContentName, "之");
liqin's avatar
liqin committed
491 492
            }
        }
liqin's avatar
liqin committed
493 494 495 496 497

        int successCount = 0;
        int failureCount = 0;
        List<BatchUploadResVO.HandleResult> handleList = new ArrayList<>();

liqin's avatar
liqin committed
498
        Set<Asset> fileList = new LinkedHashSet<>();
liqin's avatar
liqin committed
499 500 501 502 503 504 505 506 507 508 509 510
        for (MultipartFile file : files) {
            // 当前维度表下线结果
            BatchUploadResVO.HandleResult handleResult = new BatchUploadResVO.HandleResult();
            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            if (StringUtils.isBlank(originalFilename)) {
                handleResult.setFileName("");
                handleResult.setFileType(FileTypeEnum.VIDEO.getName());
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
                handleResult.setDescription("文件名为空");
                failureCount++;
liqin's avatar
liqin committed
511
                handleList.add(handleResult);
liqin's avatar
liqin committed
512 513
                continue;
            }
liqin's avatar
liqin committed
514 515 516 517
            if (file.getSize() == 0L) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
liqin's avatar
liqin committed
518
                handleResult.setDescription("文件" + originalFilename + "大小为0");
liqin's avatar
liqin committed
519
                failureCount++;
liqin's avatar
liqin committed
520
                handleList.add(handleResult);
liqin's avatar
liqin committed
521 522
                continue;
            }
liqin's avatar
liqin committed
523 524

            final String baseName = FilenameUtils.getBaseName(originalFilename);
liqin's avatar
liqin committed
525
            String extName = FilenameUtils.getExtension(originalFilename);
liqin's avatar
liqin committed
526 527
            String finalExtName = extName;
            boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()));
liqin's avatar
liqin committed
528
            if (anyMatch) {
liqin's avatar
liqin committed
529
                if ("MPEG".equals(extName.toUpperCase()) || "MOV".equals(extName.toUpperCase())) {
liqin's avatar
liqin committed
530
                    extName = "mp4";
liqin's avatar
liqin committed
531
                    originalFilename = baseName + "." + extName;
liqin's avatar
liqin committed
532
                }
liqin's avatar
liqin committed
533 534 535 536 537
                String language = null;
                final Set<MetaData> metaDataSet = new HashSet<>();
                metaDataSet.add(new MetaData("fileName", originalFilename));
                metaDataSet.add(new MetaData("fileType", FileTypeEnum.VIDEO.name()));
                if (originalFilename.contains("汉语")) {
liqin's avatar
liqin committed
538 539
                    metaDataSet.add(new MetaData("language", LanguageEnum.ZH.name()));
                    language = LanguageEnum.ZH.name();
liqin's avatar
liqin committed
540
                } else if (originalFilename.contains("蒙语")) {
liqin's avatar
liqin committed
541 542
                    metaDataSet.add(new MetaData("language", LanguageEnum.MN.name()));
                    language = LanguageEnum.MN.name();
liqin's avatar
liqin committed
543
                } else if (originalFilename.contains("藏语")) {
liqin's avatar
liqin committed
544 545
                    metaDataSet.add(new MetaData("language", LanguageEnum.BO.name()));
                    language = LanguageEnum.BO.name();
liqin's avatar
liqin committed
546
                } else if (originalFilename.contains("维吾尔语")) {
liqin's avatar
liqin committed
547 548
                    metaDataSet.add(new MetaData("language", LanguageEnum.UYG.name()));
                    language = LanguageEnum.UYG.name();
549 550 551 552
                    //加上英语
                }else if (originalFilename.contains("英语")) {
                    metaDataSet.add(new MetaData("language", LanguageEnum.EN.name()));
                    language = LanguageEnum.EN.name();
liqin's avatar
liqin committed
553
                }
liqin's avatar
liqin committed
554 555 556
                final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                IOUtils.copy(file.getInputStream(), byteArrayOutputStream);
                final String fileUrl = FastDFSUtils.uploadVideo(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), file.getSize(), originalFilename, metaDataSet);
liqin's avatar
liqin committed
557
                metaDataSet.removeIf(x -> "MD5".equals(x.getName()));
liqin's avatar
liqin committed
558 559 560
                metaDataSet.add(new MetaData("fileName", baseName + ".chnmuseum"));
                final String fileUrlCrypto = FastDFSUtils.uploadVideo(VideoEncryptUtil.encrypt(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), VideoEncryptUtil.cipher), file.getSize(), baseName + ".chnmuseum", metaDataSet);
                final Set<MetaData> fileMetaData = FastDFSUtils.getFileMetaData(fileUrlCrypto);
liqin's avatar
liqin committed
561
                String md5 = fileMetaData.stream().filter(x -> "MD5".equals(x.getName())).map(MetaData::getValue).findFirst().get();
liqin's avatar
liqin committed
562

liqin's avatar
liqin committed
563 564
                final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
                final int crc32 = fileInfo.getCrc32();
liqin's avatar
liqin committed
565
                final Asset one = this.assetService.getOne(Wrappers.<Asset>lambdaQuery().eq(Asset::getCrc32, (long) crc32).last(" limit 1"));
liqin's avatar
liqin committed
566
                final LocalDateTime createTime = TimeUtils.getDateTimeOfTimestamp(fileInfo.getCreateTime() * 1000);
liqin's avatar
liqin committed
567 568 569
                final long fileSize = fileInfo.getFileSize();
                final Asset asset = Asset.builder()
                        .fileName(originalFilename)
liqin's avatar
liqin committed
570
                        .fileNameCrypto(md5 + ".chnmuseum")
liqin's avatar
liqin committed
571
                        .fileExtName(extName)
liqin's avatar
liqin committed
572
                        .fileType(FileTypeEnum.VIDEO.name())
liqin's avatar
liqin committed
573
                        .fileSize(fileSize)
liqin's avatar
liqin committed
574
                        .intro(Base64.getEncoder().encodeToString(fileUrl.getBytes()))
liqin's avatar
liqin committed
575
                        .fileUrlCrypto(fileUrlCrypto)
576
                        .fileUrl(fileUrl)
liqin's avatar
liqin committed
577 578 579
                        .fileCat(FileCatEnum.VIDEO_CONTENT.name())
                        .language(language)
                        .md5(md5)
liqin's avatar
liqin committed
580
                        .crc32((long) crc32)
liqin's avatar
liqin committed
581
                        .videoContentName(videoContentName)
liqin's avatar
liqin committed
582 583 584
                        .createTime(createTime)
                        .updateTime(createTime)
                        .build();
liqin's avatar
liqin committed
585 586
                if (one != null) {
                    FastDFSUtils.deleteFile(fileUrl);
liqin's avatar
liqin committed
587
                    FastDFSUtils.deleteFile(fileUrlCrypto);
liqin's avatar
liqin committed
588
                    asset.setIntro(one.getIntro());
liqin's avatar
liqin committed
589
                    asset.setFileUrlCrypto(one.getFileUrlCrypto());
590
                    asset.setFileUrl(one.getFileUrl());
liqin's avatar
liqin committed
591
                    asset.setFileNameCrypto(one.getFileNameCrypto());
liqin's avatar
liqin committed
592 593
                    asset.setMd5(one.getMd5());
                    asset.setCrc32(one.getCrc32());
liqin's avatar
liqin committed
594
                }
liqin's avatar
liqin committed
595 596 597
                this.assetService.save(asset);
                fileList.add(asset);

liqin's avatar
liqin committed
598
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
599 600 601
                handleResult.setFileName(originalFilename);
                handleResult.setFileType(FileTypeEnum.VIDEO.getName());
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
liqin's avatar
liqin committed
602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626
                handleResult.setDescription("");
                successCount++;
            } else {
                handleResult.setFileUrl("");
                handleResult.setHandleResult("上传失败");
                handleResult.setDescription("文件" + originalFilename + "格式不支持");
                failureCount++;
            }
            // 设置处理的业务表信息
            handleList.add(handleResult);
        }

        BatchUploadResVO batchUploadResVO = new BatchUploadResVO();
        batchUploadResVO.setFailureCount(failureCount);
        batchUploadResVO.setSuccessCount(successCount);
        batchUploadResVO.setTotal(files.length);
        batchUploadResVO.setHandleList(handleList);
        batchUploadResVO.setFileList(fileList);
        return getResult(batchUploadResVO);
    }

    @ApiImplicitParams({
            @ApiImplicitParam(name = "file", value = "视频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true, required = true)
    })
    @PostMapping(value = "/video/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
wzp's avatar
wzp committed
627
    @RequiresAuthentication  //@RequiresPermissions("file:video:upload")
liqin's avatar
liqin committed
628 629 630
    @ApiOperation(value = "多视频上传", notes = "多视频上传")
    public Map<String, Object> uploadVideo(@RequestPart("file") MultipartFile[] files) throws IOException {
        if (files == null || files.length == 0) {
liqin's avatar
liqin committed
631
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
632
        }
liqin's avatar
liqin committed
633 634 635 636
        if (files.length == 1) {
            String extName = FilenameUtils.getExtension(files[0].getOriginalFilename());
            boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, extName.toUpperCase()));
            if (!anyMatch) {
637 638
//                return getFailResult("目前仅支持" + String.join("、", VIDEO_TYPE) + "格式");
                return getFailResult("支持h264编码的MP4视频、VP8编码的webm视频和Theora编码的ogg视频");
liqin's avatar
liqin committed
639 640
            }
        }
liqin's avatar
liqin committed
641 642 643 644 645

        int successCount = 0;
        int failureCount = 0;
        List<BatchUploadResVO.HandleResult> handleList = new ArrayList<>();

liqin's avatar
liqin committed
646
        Set<Asset> fileList = new LinkedHashSet<>();
liqin's avatar
liqin committed
647 648 649 650 651 652 653 654 655 656 657 658
        for (MultipartFile file : files) {
            // 当前维度表下线结果
            BatchUploadResVO.HandleResult handleResult = new BatchUploadResVO.HandleResult();
            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            if (StringUtils.isBlank(originalFilename)) {
                handleResult.setFileName("");
                handleResult.setFileType(FileTypeEnum.VIDEO.getName());
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
                handleResult.setDescription("文件名为空");
                failureCount++;
liqin's avatar
liqin committed
659
                handleList.add(handleResult);
liqin's avatar
liqin committed
660 661
                continue;
            }
liqin's avatar
liqin committed
662 663 664 665
            if (file.getSize() == 0L) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
liqin's avatar
liqin committed
666
                handleResult.setDescription("文件" + originalFilename + "大小为0");
liqin's avatar
liqin committed
667
                failureCount++;
liqin's avatar
liqin committed
668
                handleList.add(handleResult);
liqin's avatar
liqin committed
669 670
                continue;
            }
liqin's avatar
liqin committed
671 672

            String extName = FilenameUtils.getExtension(originalFilename);
liqin's avatar
liqin committed
673 674
            String finalExtName = extName;
            boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()));
liqin's avatar
liqin committed
675
            if (anyMatch) {
liqin's avatar
liqin committed
676
                if ("MPEG".equals(extName.toUpperCase()) || "MOV".equals(extName.toUpperCase())) {
liqin's avatar
liqin committed
677 678 679
                    extName = "mp4";
                    originalFilename = FilenameUtils.getBaseName(originalFilename) + "." + extName;
                }
liqin's avatar
liqin committed
680 681 682
                final Set<MetaData> metaDataSet = new HashSet<>();
                metaDataSet.add(new MetaData("fileName", originalFilename));
                metaDataSet.add(new MetaData("fileType", FileTypeEnum.VIDEO.name()));
liqin's avatar
liqin committed
683
                final String fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
liqin's avatar
liqin committed
684 685 686 687 688
                final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
                final Asset asset = Asset.builder()
                        .fileName(originalFilename)
                        .fileExtName(extName)
                        .fileType(FileTypeEnum.VIDEO.name())
liqin's avatar
liqin committed
689
                        .fileSize(fileInfo.getFileSize())
liqin's avatar
liqin committed
690 691
                        .fileUrl(fileUrl)
                        .fileCat(FileCatEnum.VIEWING_INTERACTION.name())
liqin's avatar
liqin committed
692
                        .crc32((long) fileInfo.getCrc32())
liqin's avatar
liqin committed
693 694 695 696 697 698 699
                        .build();
                this.assetService.save(asset);
                fileList.add(asset);

                handleResult.setFileUrl(fileUrl);
                handleResult.setFileName(originalFilename);
                handleResult.setFileType(FileTypeEnum.VIDEO.getName());
liqin's avatar
liqin committed
700 701
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
                handleResult.setDescription("");
liqin's avatar
liqin committed
702 703 704
                successCount++;
            } else {
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
705 706
                handleResult.setHandleResult("上传失败");
                handleResult.setDescription("文件" + originalFilename + "格式不支持");
liqin's avatar
liqin committed
707 708 709 710 711 712 713 714 715 716 717
                failureCount++;
            }
            // 设置处理的业务表信息
            handleList.add(handleResult);
        }

        BatchUploadResVO batchUploadResVO = new BatchUploadResVO();
        batchUploadResVO.setFailureCount(failureCount);
        batchUploadResVO.setSuccessCount(successCount);
        batchUploadResVO.setTotal(files.length);
        batchUploadResVO.setHandleList(handleList);
liqin's avatar
liqin committed
718
        batchUploadResVO.setFileList(fileList);
liqin's avatar
liqin committed
719
        return getResult(batchUploadResVO);
liqin's avatar
liqin committed
720 721 722
    }

}