fix(图片预览): 图片预览优化

This commit is contained in:
MAC 2021-12-07 23:41:49 +08:00
parent d27d17f2a0
commit c84d4bf9c6
7 changed files with 111 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package com.qiwenshare.file.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.exception.NotLoginException;
import com.qiwenshare.common.result.RestResult;
@ -12,10 +13,14 @@ import com.qiwenshare.file.domain.*;
import com.qiwenshare.file.dto.file.DownloadFileDTO;
import com.qiwenshare.file.dto.file.UploadFileDTO;
import com.qiwenshare.file.dto.file.PreviewDTO;
import com.qiwenshare.file.mapper.ImageMapper;
import com.qiwenshare.file.service.StorageService;
import com.qiwenshare.file.vo.file.FileListVo;
import com.qiwenshare.file.vo.file.UploadFileVo;
import com.qiwenshare.ufop.constant.UploadFileStatusEnum;
import com.qiwenshare.ufop.factory.UFOPFactory;
import com.qiwenshare.ufop.operation.download.Downloader;
import com.qiwenshare.ufop.operation.download.domain.DownloadFile;
import com.qiwenshare.ufop.util.UFOPUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -24,8 +29,12 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
@ -52,6 +61,10 @@ public class FiletransferController {
StorageService storageService;
@Resource
IUploadTaskService uploadTaskService;
@Resource
ImageMapper imageMapper;
@Resource
UFOPFactory ufopFactory;
@Resource
IUploadTaskDetailService uploadTaskDetailService;
@ -211,6 +224,32 @@ public class FiletransferController {
}
FileBean fileBean = fileService.getById(userFile.getFileId());
/********************************** 图片预览适配 **************************************/
LambdaQueryWrapper<Image> imageLambdaQueryWrapper = new LambdaQueryWrapper<>();
imageLambdaQueryWrapper.eq(Image::getFileId, fileBean.getFileId());
Image result = imageMapper.selectOne(imageLambdaQueryWrapper);
if (result == null) {
if (UFOPUtils.isImageFile(userFile.getExtendName())) {
Downloader downloader = ufopFactory.getDownloader(fileBean.getStorageType());
DownloadFile downloadFile = new DownloadFile();
downloadFile.setFileUrl(fileBean.getFileUrl());
InputStream is = downloader.getInputStream(downloadFile);
BufferedImage src = null;
try {
src = ImageIO.read(is);
} catch (IOException e) {
e.printStackTrace();
}
Image image = new Image();
image.setImageWidth(src.getWidth());
image.setImageHeight(src.getHeight());
image.setFileId(fileBean.getFileId());
imageMapper.insert(image);
}
}
/***************************************************************************/
String mime= MimeUtils.getMime(userFile.getExtendName());
httpServletResponse.setHeader("Content-Type", mime);
String rangeString = httpServletRequest.getHeader("Range");//如果是video标签发起的请求就不会为null

View File

@ -276,6 +276,8 @@ public class OfficeController {
lambdaUpdateWrapper
.set(FileBean::getIdentifier, md5Str)
.set(FileBean::getFileSize, Long.valueOf(fileLength))
.set(FileBean::getModifyTime, DateUtil.getCurrentTime())
.set(FileBean::getModifyUserId, loginUser.getUserId())
.eq(FileBean::getFileId, fileBean.getFileId());
fileService.update(lambdaUpdateWrapper);

View File

@ -0,0 +1,32 @@
package com.qiwenshare.file.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import javax.persistence.*;
/**
* @author MAC
* @version 1.0
* @description: TODO
* @date 2021/12/7 22:05
*/
@Data
@Table(name = "image")
@Entity
@TableName("image")
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@TableId(type = IdType.AUTO)
@Column(columnDefinition="bigint(20)")
private Long imageId;
@Column(columnDefinition = "bigint(20)")
private Long fileId;
@Column(columnDefinition="int(5)")
private Integer imageWidth;
@Column(columnDefinition="int(5)")
private Integer imageHeight;
}

View File

@ -0,0 +1,12 @@
package com.qiwenshare.file.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qiwenshare.file.domain.Image;
public interface ImageMapper extends BaseMapper<Image> {
}

View File

@ -32,8 +32,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.List;
import java.util.zip.Adler32;
@ -62,6 +64,8 @@ public class FiletransferService implements IFiletransferService {
UploadTaskDetailMapper UploadTaskDetailMapper;
@Resource
UploadTaskMapper uploadTaskMapper;
@Resource
ImageMapper imageMapper;
@Override
public void uploadFile(HttpServletRequest request, UploadFileDTO uploadFileDto, Long userId) {
@ -130,6 +134,23 @@ public class FiletransferService implements IFiletransferService {
lambdaUpdateWrapper.set(UploadTask::getUploadStatus, UploadFileStatusEnum.SUCCESS.getCode())
.eq(UploadTask::getIdentifier, uploadFileDto.getIdentifier());
uploadTaskMapper.update(null, lambdaUpdateWrapper);
if (UFOPUtils.isImageFile(uploadFileResult.getExtendName())) {
Downloader downloader = ufopFactory.getDownloader(uploadFileResult.getStorageType().getCode());
DownloadFile downloadFile = new DownloadFile();
downloadFile.setFileUrl(uploadFileResult.getFileUrl());
InputStream is = downloader.getInputStream(downloadFile);
BufferedImage src = null;
try {
src = ImageIO.read(is);
} catch (IOException e) {
e.printStackTrace();
}
Image image = new Image();
image.setImageWidth(src.getWidth());
image.setImageHeight(src.getHeight());
image.setFileId(fileBean.getFileId());
imageMapper.insert(image);
}
} else if (UploadFileStatusEnum.UNCOMPLATE.equals(uploadFileResult.getStatus())) {
UploadTaskDetail UploadTaskDetail = new UploadTaskDetail();

View File

@ -41,4 +41,7 @@ public class FileListVo {
private String deleteTime;
private String deleteBatchNum;
private Integer imageWidth;
private Integer imageHeight;
}

View File

@ -14,6 +14,7 @@
<select id="userFileList" resultType="com.qiwenshare.file.vo.file.FileListVo">
select * from userfile a
left join file on file.fileId = a.fileId
left join image on a.fileId = image.fileId
<where>
<if test="userFile.userId != null">
and a.userId = #{userFile.userId}
@ -58,6 +59,7 @@
</sql>
<select id="selectFileByExtendName" parameterType="com.qiwenshare.file.domain.UserFile" resultType="com.qiwenshare.file.vo.file.FileListVo">
select * from userfile
left join image on userfile.fileId = image.fileId
<include refid="selectByExtendName"></include>
limit #{beginCount}, #{pageCount}
</select>