FileUploadController.java 38.6 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);
liqin's avatar
liqin committed
184
                } else if (Arrays.stream(AUDIO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
liqin's avatar
liqin committed
185 186 187 188
                    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
189
                    asset.setFileUrl(fileUrl);
liqin's avatar
liqin committed
190
                } else if (Arrays.stream(IMAGE_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
liqin's avatar
liqin committed
191 192 193 194 195
                    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
196
                    asset.setFileUrl(fileUrl);
liqin's avatar
liqin committed
197
                } else if (Arrays.stream(DOC_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
liqin's avatar
liqin committed
198 199 200 201
                    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
202
                    asset.setFileUrl(fileUrl);
liqin's avatar
liqin committed
203
                }
liqin's avatar
liqin committed
204
                final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
liqin's avatar
liqin committed
205
                final LocalDateTime createTime = TimeUtils.getDateTimeOfTimestamp(fileInfo.getCreateTime() * 1000);
liqin's avatar
liqin committed
206 207
                asset.setFileSize(fileInfo.getFileSize());
                asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name());
liqin's avatar
liqin committed
208
                asset.setLanguage(language);
liqin's avatar
liqin committed
209 210
                asset.setCreateTime(createTime);
                asset.setUpdateTime(createTime);
liqin's avatar
liqin committed
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
                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());
liqin's avatar
liqin committed
226
                    }
liqin's avatar
liqin committed
227
                }
liqin's avatar
liqin committed
228 229 230
                this.assetService.save(asset);
                datumUrlList.add(asset);

liqin's avatar
liqin committed
231
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
232 233 234
                handleResult.setFileName(originalFilename);
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
                handleResult.setDescription("");
liqin's avatar
liqin committed
235 236 237
                successCount++;
            } else {
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
238
                handleResult.setDescription("文件" + originalFilename + "格式不支持");
liqin's avatar
liqin committed
239 240 241 242 243 244 245 246 247 248
                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
249
        batchUploadResVO.setFileList(datumUrlList);
liqin's avatar
liqin committed
250 251 252 253

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

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

liqin's avatar
liqin committed
274 275 276 277
        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
278 279 280 281 282
        ImageUploadResult imageUploadResult = new ImageUploadResult();
        imageUploadResult.setFileName(fileName);
        imageUploadResult.setFileExtName(extension);
        imageUploadResult.setFileSize(uploadFile.getSize());
        imageUploadResult.setUrl(url);
liqin's avatar
liqin committed
283
        return getResult(imageUploadResult);
liqin's avatar
liqin committed
284 285
    }

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

liqin's avatar
liqin committed
309 310 311 312
    @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
313
    @RequiresAuthentication  //@RequiresPermissions("audio:upload")
liqin's avatar
liqin committed
314
    @ApiOperation(value = "展板多音频上传", notes = "展板多音频上传")
liqin's avatar
liqin committed
315
    public Map<String, Object> uploadAudio(@RequestPart(value = "file", required = false) MultipartFile[] files) throws IOException {
wzp's avatar
wzp committed
316
        if (files == null || files.length == 0) {
liqin's avatar
liqin committed
317
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
318 319 320
        }
        final boolean existChineseAudio = Arrays.stream(files).anyMatch(s -> Objects.requireNonNull(s.getOriginalFilename()).contains("汉语"));
        if (!existChineseAudio) {
liqin's avatar
liqin committed
321
            return getFailResult("必须包含汉语音频");
liqin's avatar
liqin committed
322 323 324 325 326 327
        }

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

liqin's avatar
liqin committed
328
        Set<Asset> fileList = new LinkedHashSet<>();
liqin's avatar
liqin committed
329 330 331 332 333 334 335 336 337 338 339 340
        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
341
                handleList.add(handleResult);
liqin's avatar
liqin committed
342 343
                continue;
            }
liqin's avatar
liqin committed
344 345 346 347
            if (file.getSize() == 0L) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
liqin's avatar
liqin committed
348
                handleResult.setDescription("文件" + originalFilename + "大小为0");
liqin's avatar
liqin committed
349
                failureCount++;
liqin's avatar
liqin committed
350
                handleList.add(handleResult);
liqin's avatar
liqin committed
351 352
                continue;
            }
liqin's avatar
liqin committed
353

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

                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
408 409 410
                successCount++;
            } else {
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
411 412 413
                handleResult.setFileType(FileTypeEnum.AUDIO.getName());
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
                handleResult.setDescription("文件" + originalFilename + "格式不支持");
liqin's avatar
liqin committed
414 415 416 417 418 419 420 421 422 423 424
                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
425
        batchUploadResVO.setFileList(fileList);
liqin's avatar
liqin committed
426
        return getResult(batchUploadResVO);
liqin's avatar
liqin committed
427 428
    }

liqin's avatar
liqin committed
429
    @ApiImplicitParams({
liqin's avatar
liqin committed
430
            @ApiImplicitParam(name = "file", value = "视频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true, required = true)
liqin's avatar
liqin committed
431
    })
liqin's avatar
liqin committed
432
    @PostMapping(value = "/video/content/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
wzp's avatar
wzp committed
433
    @RequiresAuthentication  //@RequiresPermissions("file:video:content:upload")
liqin's avatar
liqin committed
434
    @ApiOperation(value = "展板视频上传", notes = "展板视频上传")
liqin's avatar
liqin committed
435
    public Map<String, Object> uploadContentVideo(@RequestPart("file") MultipartFile[] files) throws Exception {
liqin's avatar
liqin committed
436
        if (files == null || files.length == 0) {
liqin's avatar
liqin committed
437
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
438
        }
liqin's avatar
liqin committed
439 440 441 442
        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) {
443 444
//                return getFailResult("目前仅支持" + String.join("、", VIDEO_TYPE) + "格式");
                return getFailResult("支持h264编码的MP4视频、VP8编码的webm视频和Theora编码的ogg视频");
liqin's avatar
liqin committed
445 446
            }
        }
liqin's avatar
liqin committed
447 448 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
        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
480 481 482 483 484 485 486 487 488
                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
489 490
            }
        }
liqin's avatar
liqin committed
491 492 493 494 495

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

liqin's avatar
liqin committed
496
        Set<Asset> fileList = new LinkedHashSet<>();
liqin's avatar
liqin committed
497 498 499 500 501 502 503 504 505 506 507 508
        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
509
                handleList.add(handleResult);
liqin's avatar
liqin committed
510 511
                continue;
            }
liqin's avatar
liqin committed
512 513 514 515
            if (file.getSize() == 0L) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
liqin's avatar
liqin committed
516
                handleResult.setDescription("文件" + originalFilename + "大小为0");
liqin's avatar
liqin committed
517
                failureCount++;
liqin's avatar
liqin committed
518
                handleList.add(handleResult);
liqin's avatar
liqin committed
519 520
                continue;
            }
liqin's avatar
liqin committed
521 522

            final String baseName = FilenameUtils.getBaseName(originalFilename);
liqin's avatar
liqin committed
523
            String extName = FilenameUtils.getExtension(originalFilename);
liqin's avatar
liqin committed
524 525
            String finalExtName = extName;
            boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()));
liqin's avatar
liqin committed
526
            if (anyMatch) {
liqin's avatar
liqin committed
527
                if ("MPEG".equals(extName.toUpperCase()) || "MOV".equals(extName.toUpperCase())) {
liqin's avatar
liqin committed
528
                    extName = "mp4";
liqin's avatar
liqin committed
529
                    originalFilename = baseName + "." + extName;
liqin's avatar
liqin committed
530
                }
liqin's avatar
liqin committed
531 532 533 534 535
                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
536 537
                    metaDataSet.add(new MetaData("language", LanguageEnum.ZH.name()));
                    language = LanguageEnum.ZH.name();
liqin's avatar
liqin committed
538
                } else if (originalFilename.contains("蒙语")) {
liqin's avatar
liqin committed
539 540
                    metaDataSet.add(new MetaData("language", LanguageEnum.MN.name()));
                    language = LanguageEnum.MN.name();
liqin's avatar
liqin committed
541
                } else if (originalFilename.contains("藏语")) {
liqin's avatar
liqin committed
542 543
                    metaDataSet.add(new MetaData("language", LanguageEnum.BO.name()));
                    language = LanguageEnum.BO.name();
liqin's avatar
liqin committed
544
                } else if (originalFilename.contains("维吾尔语")) {
liqin's avatar
liqin committed
545 546
                    metaDataSet.add(new MetaData("language", LanguageEnum.UYG.name()));
                    language = LanguageEnum.UYG.name();
liqin's avatar
liqin committed
547
                }
liqin's avatar
liqin committed
548 549 550
                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
551
                metaDataSet.removeIf(x -> "MD5".equals(x.getName()));
liqin's avatar
liqin committed
552 553 554
                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
555
                String md5 = fileMetaData.stream().filter(x -> "MD5".equals(x.getName())).map(MetaData::getValue).findFirst().get();
liqin's avatar
liqin committed
556

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

liqin's avatar
liqin committed
590
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
591 592 593
                handleResult.setFileName(originalFilename);
                handleResult.setFileType(FileTypeEnum.VIDEO.getName());
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
liqin's avatar
liqin committed
594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618
                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
619
    @RequiresAuthentication  //@RequiresPermissions("file:video:upload")
liqin's avatar
liqin committed
620 621 622
    @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
623
            return getFailResult("没有文件可供上传");
liqin's avatar
liqin committed
624
        }
liqin's avatar
liqin committed
625 626 627 628
        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) {
629 630
//                return getFailResult("目前仅支持" + String.join("、", VIDEO_TYPE) + "格式");
                return getFailResult("支持h264编码的MP4视频、VP8编码的webm视频和Theora编码的ogg视频");
liqin's avatar
liqin committed
631 632
            }
        }
liqin's avatar
liqin committed
633 634 635 636 637

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

liqin's avatar
liqin committed
638
        Set<Asset> fileList = new LinkedHashSet<>();
liqin's avatar
liqin committed
639 640 641 642 643 644 645 646 647 648 649 650
        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
651
                handleList.add(handleResult);
liqin's avatar
liqin committed
652 653
                continue;
            }
liqin's avatar
liqin committed
654 655 656 657
            if (file.getSize() == 0L) {
                handleResult.setFileName("");
                handleResult.setFileUrl("");
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
liqin's avatar
liqin committed
658
                handleResult.setDescription("文件" + originalFilename + "大小为0");
liqin's avatar
liqin committed
659
                failureCount++;
liqin's avatar
liqin committed
660
                handleList.add(handleResult);
liqin's avatar
liqin committed
661 662
                continue;
            }
liqin's avatar
liqin committed
663 664

            String extName = FilenameUtils.getExtension(originalFilename);
liqin's avatar
liqin committed
665 666
            String finalExtName = extName;
            boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()));
liqin's avatar
liqin committed
667
            if (anyMatch) {
liqin's avatar
liqin committed
668
                if ("MPEG".equals(extName.toUpperCase()) || "MOV".equals(extName.toUpperCase())) {
liqin's avatar
liqin committed
669 670 671
                    extName = "mp4";
                    originalFilename = FilenameUtils.getBaseName(originalFilename) + "." + extName;
                }
liqin's avatar
liqin committed
672 673 674
                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
675
                final String fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
liqin's avatar
liqin committed
676 677 678 679 680
                final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
                final Asset asset = Asset.builder()
                        .fileName(originalFilename)
                        .fileExtName(extName)
                        .fileType(FileTypeEnum.VIDEO.name())
liqin's avatar
liqin committed
681
                        .fileSize(fileInfo.getFileSize())
liqin's avatar
liqin committed
682 683
                        .fileUrl(fileUrl)
                        .fileCat(FileCatEnum.VIEWING_INTERACTION.name())
liqin's avatar
liqin committed
684
                        .crc32((long) fileInfo.getCrc32())
liqin's avatar
liqin committed
685 686 687 688 689 690 691
                        .build();
                this.assetService.save(asset);
                fileList.add(asset);

                handleResult.setFileUrl(fileUrl);
                handleResult.setFileName(originalFilename);
                handleResult.setFileType(FileTypeEnum.VIDEO.getName());
liqin's avatar
liqin committed
692 693
                handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
                handleResult.setDescription("");
liqin's avatar
liqin committed
694 695 696
                successCount++;
            } else {
                handleResult.setFileUrl("");
liqin's avatar
liqin committed
697 698
                handleResult.setHandleResult("上传失败");
                handleResult.setDescription("文件" + originalFilename + "格式不支持");
liqin's avatar
liqin committed
699 700 701 702 703 704 705 706 707 708 709
                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
710
        batchUploadResVO.setFileList(fileList);
liqin's avatar
liqin committed
711
        return getResult(batchUploadResVO);
liqin's avatar
liqin committed
712 713 714
    }

}