1. 文件下载无法打开bug
This commit is contained in:
parent
4bd86c2e0e
commit
3c28d43fe4
|
|
@ -39,7 +39,7 @@ public class FileController {
|
|||
*/
|
||||
@SysLog(value = "文件上传", businessType = BusinessType.INSERT)
|
||||
@PostMapping(value = "/upload")
|
||||
@RequiresPermissions("system:file:upload")
|
||||
// @RequiresPermissions("system:file:upload")
|
||||
public AjaxResult uploadFile(@RequestParam(value = "files") MultipartFile[] files,
|
||||
@RequestParam(value = "ocrType", required = false) String ocrType,
|
||||
@RequestParam(value = "sealFlag", required = false, defaultValue= "false") Boolean sealFlag,
|
||||
|
|
@ -52,7 +52,7 @@ public class FileController {
|
|||
/**
|
||||
* 合同上传
|
||||
*/
|
||||
@SysLog(value = "合同上传", businessType = BusinessType.INSERT)
|
||||
@SysLog(value = "合同", businessType = BusinessType.UPLOAD)
|
||||
@PostMapping(value = "/uploadContract")
|
||||
@RequiresPermissions("system:file:upload")
|
||||
public AjaxResult uploadContract(@RequestParam(value = "file") MultipartFile file) throws Exception
|
||||
|
|
@ -60,8 +60,11 @@ public class FileController {
|
|||
return AjaxResult.success(fileSourceService.uploadContract(file));
|
||||
}
|
||||
|
||||
|
||||
@SysLog(value = "文件预览", businessType = BusinessType.OTHER)
|
||||
/**
|
||||
* 文件预览
|
||||
* @param fid 文件id
|
||||
*/
|
||||
@SysLog(value = "文件", businessType = BusinessType.PREVIEW)
|
||||
@GetMapping(value="/{fid}/preview")
|
||||
@RequiresPermissions("system:file:preview")
|
||||
public void preview(@PathVariable String fid, HttpServletResponse response)
|
||||
|
|
@ -70,14 +73,22 @@ public class FileController {
|
|||
fileSourceService.getFileStream(fid, response, true);
|
||||
}
|
||||
|
||||
@SysLog(value = "文件下载", businessType = BusinessType.OTHER)
|
||||
/**
|
||||
* 文件下载
|
||||
* @param fid 文件id
|
||||
*/
|
||||
@SysLog(value = "文件下载", businessType = BusinessType.DOWNLOAD)
|
||||
@GetMapping(value = "/download/{fid}")
|
||||
@RequiresPermissions("system:file:download")
|
||||
// @RequiresPermissions("system:file:download")
|
||||
public void downloadFile(@PathVariable String fid, HttpServletResponse response) {
|
||||
log.info("[OSS]download Request --> param:{}",fid);
|
||||
fileSourceService.getFileStream(fid, response, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除文件
|
||||
* @param fid 文件id
|
||||
*/
|
||||
@SysLog(value = "文件", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping(value = "/del/{fid}")
|
||||
@RequiresPermissions("system:file:del")
|
||||
|
|
@ -86,6 +97,10 @@ public class FileController {
|
|||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除文件
|
||||
* @param fids 文件fid
|
||||
*/
|
||||
@SysLog(value = "批量文件", businessType = BusinessType.DELETE)
|
||||
@PostMapping(value = "/del/batch")
|
||||
@RequiresPermissions("system:file:del")
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -100,7 +102,7 @@ public class FileSourceService
|
|||
info.setName(fName);
|
||||
// mimeType 还不是 后缀 类型
|
||||
info.setMimeType(mimetype);
|
||||
info.setSize(file.getSize());
|
||||
info.setSize((long) file.getBytes().length);
|
||||
String md5 = FileUtils.getMd5(file.getInputStream());
|
||||
info.setMd5(md5);
|
||||
String path = ossService.getPrefixPath(md5,fName);
|
||||
|
|
@ -150,26 +152,34 @@ public class FileSourceService
|
|||
return result;
|
||||
}
|
||||
|
||||
public void getFileStream(String fid, HttpServletResponse response, boolean convertText) {
|
||||
|
||||
public void getFileStream(String fid, HttpServletResponse response, boolean convertText)
|
||||
{
|
||||
// 文件信息
|
||||
FileSourceInfo info = getOne(new LambdaQueryWrapper<FileSourceInfo>()
|
||||
.eq(FileSourceInfo::getFid, fid)
|
||||
.last(Operator.LIMIT_ONE.getCharacter()));
|
||||
if (ObjUtil.isEmpty(info)) return;
|
||||
InputStream fileStream = ossService.getFileStream(info);
|
||||
// InputStream fileStream = ossService.getFileStream(info);
|
||||
byte[] fileBytes = ossService.getFileBytes(info);
|
||||
response.setContentType(info.getMimeType());
|
||||
try (OutputStream os = response.getOutputStream()){
|
||||
if (FileUtils.isText(fileStream) && convertText){
|
||||
response.addHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(info.getName(), StandardCharsets.UTF_8));
|
||||
response.addHeader("Content-Length", "" + fileBytes.length);
|
||||
response.setContentType("application/octet-stream");
|
||||
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileBytes);
|
||||
if (FileUtils.isText(byteArrayInputStream) && convertText){
|
||||
//是文本则读取内容输出
|
||||
OutputStreamWriter osw = new OutputStreamWriter(os);
|
||||
osw.write(IOUtils.toString(fileStream, FileUtils.getStreamCharset(fileStream)));
|
||||
osw.write(IOUtils.toString(byteArrayInputStream, FileUtils.getStreamCharset(byteArrayInputStream)));
|
||||
osw.flush();
|
||||
}else {
|
||||
byte[] readByte = new byte[1024];
|
||||
int len = 0;
|
||||
while ((len = fileStream.read(readByte, 0, readByte.length)) != -1) {
|
||||
os.write(readByte, 0, len);
|
||||
}
|
||||
// byte[] readByte = new byte[10240];
|
||||
// int len = 0;
|
||||
// while((len = fileStream.read(readByte, 0, readByte.length)) != -1) {
|
||||
// os.write(readByte,0,len);
|
||||
// }
|
||||
os.write(fileBytes);
|
||||
os.flush();
|
||||
}
|
||||
}catch (Exception e){
|
||||
|
|
@ -178,7 +188,8 @@ public class FileSourceService
|
|||
}
|
||||
|
||||
@Transactional
|
||||
public void delFile(String fid) {
|
||||
public void delFile(String fid)
|
||||
{
|
||||
// 文件信息
|
||||
FileSourceInfo info = getOne(new LambdaQueryWrapper<FileSourceInfo>()
|
||||
.eq(FileSourceInfo::getFid, fid)
|
||||
|
|
@ -189,7 +200,8 @@ public class FileSourceService
|
|||
}
|
||||
|
||||
@Transactional
|
||||
public String delFileBatch(List<String> fids) {
|
||||
public String delFileBatch(List<String> fids)
|
||||
{
|
||||
// 文件信息
|
||||
List<FileSourceInfo> list = list(new LambdaQueryWrapper<FileSourceInfo>()
|
||||
.in(FileSourceInfo::getFid, fids));
|
||||
|
|
@ -205,8 +217,8 @@ public class FileSourceService
|
|||
return "success";
|
||||
}
|
||||
|
||||
|
||||
public String uploadQcCode() throws Exception{
|
||||
public String uploadQcCode() throws Exception
|
||||
{
|
||||
|
||||
|
||||
String url = StrUtil.format("{}?userId={}&channelId={}&channelName={}&" +
|
||||
|
|
@ -222,26 +234,27 @@ public class FileSourceService
|
|||
String ip = IPUtils.clientIp(ServletUtils.getRequest());
|
||||
String fid = generateFid();
|
||||
String fName = file.getName();
|
||||
long length = file.length();
|
||||
String md5 = FileUtils.getMd5(fileInputStream);
|
||||
// image/jpeg mimeType
|
||||
FileSourceInfo fileSourceInfo = new FileSourceInfo();
|
||||
fileSourceInfo.setUploadIp(ip);
|
||||
fileSourceInfo.setFid(fid);
|
||||
fileSourceInfo.setName(fName);
|
||||
fileSourceInfo.setSize(length);
|
||||
fileSourceInfo.setSize((long) fileInputStream.available());
|
||||
fileSourceInfo.setPath("qcCode/"+fName);
|
||||
fileSourceInfo.setMd5(md5);
|
||||
fileSourceInfo.setRealPath(url);
|
||||
fileSourceInfo.setMimeType("image/jpeg");
|
||||
fileSourceInfo.setStorage(uploadConfig.getStorage());
|
||||
String upload = ossService.upload(new FileInputStream(file), fileSourceInfo);
|
||||
fileSourceInfo.setRealPath(upload);
|
||||
save(fileSourceInfo);
|
||||
FileUtil.del(file);
|
||||
return upload;
|
||||
}
|
||||
|
||||
|
||||
public String uploadContract(MultipartFile file) throws Exception{
|
||||
public String uploadContract(MultipartFile file) throws Exception
|
||||
{
|
||||
String ip = IPUtils.clientIp(ServletUtils.getRequest());
|
||||
String fid = generateFid();
|
||||
String fName = file.getOriginalFilename();
|
||||
|
|
@ -265,9 +278,9 @@ public class FileSourceService
|
|||
log.error("文件后缀识别失败");
|
||||
}
|
||||
fileSourceInfo.setName(fName);
|
||||
fileSourceInfo.setSize(length);
|
||||
fileSourceInfo.setSize((long) file.getBytes().length);
|
||||
fileSourceInfo.setPath("contract/"+fName);
|
||||
fileSourceInfo.setStorage("contract/"+fName);
|
||||
fileSourceInfo.setStorage(uploadConfig.getStorage());
|
||||
fileSourceInfo.setMimeType(mimetype);
|
||||
String upload = ossService.upload(file.getInputStream(), fileSourceInfo);
|
||||
fileSourceInfo.setRealPath(upload);
|
||||
|
|
@ -328,9 +341,8 @@ public class FileSourceService
|
|||
return vo;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public List<FileSourceVo> uploadFile(byte[] bytes, String fileName, Boolean sealFlag, String formats, String fileType) {
|
||||
public List<FileSourceVo> uploadFile(byte[] bytes, String fileName, Boolean sealFlag, String formats, String fileType)
|
||||
{
|
||||
return Collections.singletonList(addFile(bytes, fileName, sealFlag, formats, fileType));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,4 +57,6 @@ public interface OssService {
|
|||
|
||||
InputStream getFileStream(FileSourceInfo info);
|
||||
|
||||
byte[] getFileBytes(FileSourceInfo info);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,5 +121,10 @@ public class AliServiceImpl implements OssService {
|
|||
return object.getObjectContent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getFileBytes(FileSourceInfo info) {
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -217,4 +217,18 @@ public class MinioServiceImpl implements OssService {
|
|||
throw new ResultException("获取文件失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getFileBytes(FileSourceInfo info) {
|
||||
try {
|
||||
GetObjectResponse object = minio.getObject(GetObjectArgs.builder()
|
||||
.bucket(config.getBucketName())
|
||||
.object(info.getPath())
|
||||
.build());
|
||||
return object.readAllBytes();
|
||||
} catch (Exception e) {
|
||||
log.error("获取minio object error", e);
|
||||
throw new ResultException("获取文件失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue