package com.xuecheng.media.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.j256.simplemagic.ContentInfo;
import com.j256.simplemagic.ContentInfoUtil;
import com.xuecheng.base.exception.XueChengPlusException;
import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.base.model.RestResponse;
import com.xuecheng.media.mapper.MediaFilesMapper;
import com.xuecheng.media.mapper.MediaProcessMapper;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamsDto;
import com.xuecheng.media.model.dto.UploadFileResultDto;
import com.xuecheng.media.model.po.MediaFiles;
import com.xuecheng.media.model.po.MediaProcess;
import com.xuecheng.media.service.MediaFileService;
import io.minio.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.*;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
/**
* @author Mr.M
* @version 1.0
* @description TODO
* @date 2022/9/10 8:58
*/
@Slf4j
@Service
public class MediaFileServiceImpl implements MediaFileService {
@Autowired
MediaFilesMapper mediaFilesMapper;
@Autowired
MediaProcessMapper mediaProcessMapper;
@Autowired
MinioClient minioClient;
//普通文件存储的桶
@Value("${minio.bucket.files}")
private String bucket_files;
//视频文件存储的桶
@Value("${minio.bucket.videofiles}")
private String bucket_videofiles;
@Autowired
MediaFileService currentProxy;
@Override
public PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto) {
//构建查询条件对象
LambdaQueryWrapper<MediaFiles> queryWrapper = new LambdaQueryWrapper<>();
//分页对象
Page<MediaFiles> page = new Page<>(pageParams.getPageNo(), pageParams.getPageSize());
// 查询数据内容获得结果
Page<MediaFiles> pageResult = mediaFilesMapper.selectPage(page, queryWrapper);
// 获取数据列表
List<MediaFiles> list = pageResult.getRecords();
// 获取数据总数
long total = pageResult.getTotal();
// 构建结果集
PageResult<MediaFiles> mediaListResult = new PageResult<>(list, total, pageParams.getPageNo(), pageParams.getPageSize());
return mediaListResult;
}
@Override
public UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto uploadFileParamsDto, byte[] bytes, String folder, String objectName) {
//得到文件的md5值
String fileMd5 = DigestUtils.md5Hex(bytes);
if (StringUtils.isEmpty(folder)) {
//自动生成目录的路径 按年月日生成,
folder = getFileFolder(new Date(), true, true, true);
} else if (folder.indexOf("/") < 0) {
folder = folder + "/";
}
//文件名称
String filename = uploadFileParamsDto.getFilename();
if (StringUtils.isEmpty(objectName)) {
//如果objectName为空,使用文件的md5值为objectName
objectName = fileMd5 + filename.substring(filename.lastIndexOf("."));
}
objectName = folder + objectName;
try {
addMediaFilesToMinIO(bytes, bucket_files, objectName);
MediaFiles mediaFiles = currentProxy.addMediaFilesToDb(companyId, fileMd5, uploadFileParamsDto, bucket_files, objectName);
//准备返回数据
UploadFileResultDto uploadFileResultDto = new UploadFileResultDto();
BeanUtils.copyProperties(mediaFiles, uploadFileResultDto);
return uploadFileResultDto;
} catch (Exception e) {
log.debug("上传文件失败:{}", e.getMessage());
throw new RuntimeException(e.getMessage());
}
// return null;
}
// @Override
// public UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto uploadFileParamsDto, byte[] bytes, String folder, String objectName) {
//
//
// //得到文件的md5值
// String fileMd5 = DigestUtils.md5Hex(bytes);
//
// if(StringUtils.isEmpty(folder)){
// //自动生成目录的路径 按年月日生成,
// folder = getFileFolder(new Date(), true, true, true);
// }else if(folder.indexOf("/")<0){
// folder = folder+"/";
// }
// //文件名称
// String filename = uploadFileParamsDto.getFilename();
//
// if(StringUtils.isEmpty(objectName)){
// //如果objectName为空,使用文件的md5值为objectName
// objectName = fileMd5 + filename.substring(filename.lastIndexOf("."));
// }
//
// objectName = folder + objectName;
//
// try {
// ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
// String contentType = uploadFileParamsDto.getContentType();
//
// PutObjectArgs putObjectArgs = PutObjectArgs.builder()
// .bucket(bucket_files)
// .object(objectName)
// //InputStream stream, long objectSize 对象大小, long partSize 分片大小(-1表示5M,最大不要超过5T,最多10000)
// .stream(byteArrayInputStream, byteArrayInputStream.available(), -1)
// .contentType(contentType)
// .build();
// //上传到minio
// minioClient.putObject(putObjectArgs);
//
// //保存到数据库
// MediaFiles mediaFiles = mediaFilesMapper.selectById(fileMd5);
// if(mediaFiles == null){
// mediaFiles = new MediaFiles();
//
// //封装数据
// BeanUtils.copyProperties(uploadFileParamsDto,mediaFiles);
// mediaFiles.setId(fileMd5);
// mediaFiles.setFileId(fileMd5);
// mediaFiles.setCompanyId(companyId);
// mediaFiles.setFilename(filename);
// mediaFiles.setBucket(bucket_files);
// mediaFiles.setFilePath(objectName);
// mediaFiles.setUrl("/"+bucket_files+"/"+objectName);
// mediaFiles.setCreateDate(LocalDateTime.now());
// mediaFiles.setStatus("1");
// mediaFiles.setAuditStatus("002003");
//
// //插入文件表
// mediaFilesMapper.insert(mediaFiles);
//
// }
//
// //准备返回数据
// UploadFileResultDto uploadFileResultDto = new UploadFileResultDto();
// BeanUtils.copyProperties(mediaFiles,uploadFileResultDto);
// return uploadFileResultDto;
//
//
// } catch (Exception e) {
// log.debug("上传文件失败:{}",e.getMessage());
// }
//
// return null;
// }
/**
* @param companyId
* @param fileId
* @param uploadFileParamsDto
* @param bucket
* @param objectName
* @return com.xuecheng.media.model.po.MediaFiles
* @description 将文件信息入库
* @author Mr.M
* @date 2022/
没有合适的资源?快使用搜索试试~ 我知道了~
xuecheng-plus-project148.zip
共1751个文件
xml:458个
class:318个
java:310个
需积分: 0 0 下载量 116 浏览量
2023-05-24
20:20:47
上传
评论
收藏 5.86MB ZIP 举报
温馨提示
123
资源推荐
资源详情
资源评论
收起资源包目录
xuecheng-plus-project148.zip (1751个子文件)
0071d92acb56d9a1b3a380df6b173f0692de42 448B
01b63144898bc03883d24a620cf7ae1bb8c9a4 239B
02de45984f03c45d91a0dcf8102708f604c050 360B
02e709ef2249d74b9e98a41d42145bb363d42f 237B
02eeb809c55cfbb26fe2784b8ce86865a61c23 706B
033f6a37f869378b87b4c2dbd7cd803e0dc064 251B
03687bb4a56e02c146e963e4456e4ef1bb1f42 564B
03e78b1aab6f1ee49d35b4b323150adb535021 149B
049b8813028cd24bec86b71c27168ec8271097 265B
05dc89aa01d3e365c21316c7d042c54117fa5d 846B
064ca4dec95968addd953ba9f17d82dd1d67b5 508B
07875899753e0b68394ea1692d333aed04eec5 235B
07ccb1e1b01c84bb37f6cd6c7d8656f7189b2e 249B
07fdf7c10593d29e4f60a3dfddfa88f9143bf8 2KB
0964ce05fb425d61d27810cf547e748c0652ed 247B
0971c646f8197c06c6d4651184e7e9a129c571 249B
0991c2d0f0a2a8020b0ccf290dd001a4420df4 402B
09d57764654cec6110f798e0dedca9584321c8 345B
0c3c72b1e529ab2696068f2bea0cbe51037c53 986B
0c4f0175b48dee75f6b8ef6ea71042fec4eb76 226B
0e36923531be687d56e04721bbe19b95ca6800 183B
0e55143be1c5d81c2c0437e7b6fc150861dd54 1KB
10ba0996e439bcf9f5ce1cffc30c6433ef321d 66B
11571d80789e436bd6d1b171914b9612a7286c 661B
11a14b556ce9df5e24ff98990f7dc00b4f2b34 285B
1225f5414f3417ffe860de59e8e106c9b8b671 789B
12729506841b3f72ae1f02ea173f0ba3e00005 156B
148f3526898287410ebe38040bfb15ff6373fb 355B
169cec9e101917de1d4d8007836f7b0691604f 186B
178626beb7a4f572b8d48bcac1de6387708e6e 252B
178b71ccf74f4fbf2972b07dc4b15d26512941 381B
1a4c0601dc2edd4e8032f5e941c321132f7876 243B
1b7be6cb960b548aca7116ab81b2dfc591b82e 243B
1d5250d9b782d187f4fa30af236509e10d9a1c 195B
1d5f7792140fcc301ae96520a678f11be0473a 44B
1d646d756d3b729ea1de71369e162ca4cf0ddc 792B
206370a854019bbace76b9205ce477a3bd2756 470B
22dbe59dff90ecd65f7cdf5b7d007e9ca11d2f 49B
22f693020c28a720179b1e17459cd020c64bcb 575B
26cd3279559eac29664647358f13623a40175f 322B
2754ca7742e51529d5299620d34e978c364c4b 830B
278ea7b4458639147e6f8027a5737cb015b402 2KB
27f7ce51fa9821b6c11115df462bfe93ea4981 358B
29c0174596f3c849bbd68e58a67a89c2f2252c 45B
2a094b76d51c881a2d774bc79393718cb2ea0c 82B
2d2a16bf4d5ae0a41c7b9e89e0ed0ab4ccb52a 102B
2d521b65b98d948ea241dd41aa3734f3dc8b10 81B
2d71d010ab7888ef90dd5b1f2c877f8938b1ab 196B
2f03677979dee9bf97b8a35d58499b5148a804 240B
2f139ce25c6f225e0cb5fb199704f51273de00 307B
33032c6b4e1c67360e3e58f0ed653542e0565a 141B
364ed41ff4b837d47e0ad24a11a9cfd3ad09be 524B
3655fc1a28b443a86811b8c66681d42b8fc28b 249B
39c3059b8308bbc6eeca143e5a53d079948ad0 844B
3acb8294831ee7f7cfc3a78040c3669f22f09c 222B
3cbb2c43cbe31849e53d7a8b14cb90d1906c28 240B
3d25a0d604f9d71511db43d1a4ff050e3b3bc9 45B
3def12504c5c30d47e20ecd4b93c5cf4a23eb0 253B
3f7fce84654b7a521a3c3cb55057fdda28f295 225B
3fd1baaa4eb573a74737ffd30e8d7c28a934b6 74B
40e0a2c731b856674b92faaa1b24cb2f213c93 218B
4297009039e966e79e33fa4a7782e5a50f3b75 221B
43083acd294d3a902fa912970b1dc613fa31c1 188B
432b9788808a3a55293ae3b3141973b0ee4c64 1KB
442d7228331eec114ce779a721712e4e1803da 45B
45a9b52f694e88c4ea2e0c809fa7821dfbc8de 435B
462042d79338800ae8bea546bf9081a18b4339 224B
463c68f9fdb1c8bbcb2aaefae1e9c0f05035ba 81B
46a8f3b0ab0c57706a114ede0c729126b39a2e 234B
471540f6f60c86e7ffb4237670abd7a1592504 131B
4730c8fc443761a0deb5d5e9da20c6db2c1513 427B
482111b0b4c3c7b0d633a128745da43ec6a58b 80B
498011d530a55a694108d23d5b47d5ef260ee7 242B
4a18ca2c24655cc7fdbcc97c7d9ad97ca8c9e6 262B
4dea2c66430edb5f0fe5420a00c0cf7d69f2ff 184B
4ea8f8d33434b65b125c272f54174615dd6707 549B
4f3615b09c1f4f9f8c5421ffafd0c1914af18a 354B
515bc85b798bc6d97660937306ab80d16ec551 265B
53d700a0f0ccb98cbc0e7d6dbfa6560f7baf00 322B
54c61a25d0e4921fa5c2a5c829b380bfcfa902 148B
557c6b142efb8b874323884140c15e40820854 331B
566b81b018ad684f3a35fee301741b2734c8f4 141B
56eb857aba4bc3a479f3262593549aa415f1a7 59B
58bdecb0fdfe38816d28a5a88b2b5e26aa5b93 374B
5b17b419722e41881ace60fa7ef0637fb3710b 369B
5b26aef9124cbd50cf97793a856ce7544fe316 247B
5c4e22fedd6709ecb58469a5d810f5fb7c0390 50B
5ef391ec7627f17312b9899a87b1aa517a6eba 245B
5f662af3d809cd413a0222b22d56dbf008ff8b 236B
616c4bc0ebd94d344ccd62f71f4b39fcd9facf 1KB
61cb83390cc5e35133133b39c4c91b20991463 233B
62911a0ca8e6f1cce913c69ffba0c53d2e8b71 330B
62d26d3440a43914a44625aa4b6b935c7b3f45 2KB
6302a85a6a07b183040052ef4497ce2e1a0d0d 82B
6357134358eb45145f810c20ff84081884beae 172B
63a1204e16228df04797007df91f65a83935bd 1KB
647db4525bfb682ccbfda89e0e70a2989fd742 72B
65a309e6eaff3d841a2aeeb195e9daeef22daa 273B
65e5f7c9d6cfd9cbe283cfc111464f13a250c6 46B
6747d69dfc37de0510020d4170afc16b031440 47B
共 1751 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18
资源评论
ZhangBlossom
- 粉丝: 4w+
- 资源: 254
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功