d93c14b8 by 荆蔚杰

升级minio sdk版本,代码修改中

minio批量删除接口修改.
附件删除接口bug修改.
1 parent 3eb2e4dc
......@@ -229,7 +229,7 @@
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>6.0.11</version>
<version>8.3.4</version>
</dependency>
<dependency>
......
package com.pashanhoo.common.util.fileupload;
import com.pashanhoo.common.Result;
import io.minio.messages.DeleteError;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
......@@ -10,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -58,4 +60,20 @@ public class FileController {
}
}
@DeleteMapping("/batchDeleteFile")
@ApiOperation("批量删除文件")
public Result batchDeleteFile(@ApiParam("存储url集合") @RequestBody List<String> saveUrls){
try {
List<String> msg = new ArrayList<>();
Iterable<io.minio.Result<DeleteError>> results = minioUtil.batchRemove(minioConfig.getBucket(), saveUrls);
for (io.minio.Result<DeleteError> result : results) {
DeleteError deleteError = result.get();
msg.add("Error in deleting object " + deleteError.objectName() + ":" + deleteError.message());
}
return Result.ok(msg.toString());
} catch (Exception e) {
return Result.exception(e.getMessage());
}
}
}
......
package com.pashanhoo.common.util.fileupload;
import com.pashanhoo.file.entity.vo.FileAttribute;
import io.minio.MinioClient;
import io.minio.Result;
import io.minio.errors.*;
import io.minio.*;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import org.xmlpull.v1.XmlPullParserException;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
......@@ -32,8 +28,13 @@ public class MinioUtil {
@PostConstruct
public void init() {
try {
minioClient = new MinioClient(String.format("http://%s:%s", minioConfig.getEndpoint(), minioConfig.getPort()), minioConfig.getAccessKeyId(), minioConfig.getAccessKeySecret());
} catch (InvalidEndpointException | InvalidPortException e) {
minioClient = MinioClient.builder().endpoint(String.format("http://%s:%s", minioConfig.getEndpoint(), minioConfig.getPort())).credentials(minioConfig.getAccessKeyId(), minioConfig.getAccessKeySecret()).build();
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioConfig.getBucket()).build());
if (!isExist) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioConfig.getBucket()).build());
}
// minioClient = new MinioClient(String.format("http://%s:%s", minioConfig.getEndpoint(), minioConfig.getPort()), minioConfig.getAccessKeyId(), minioConfig.getAccessKeySecret());
} catch (Exception e) {
e.printStackTrace();
}
}
......@@ -63,7 +64,8 @@ public class MinioUtil {
// 浏览器直接预览地址,针对图片
String pUrl = minioConfig.getType() + minioConfig.getEndpoint() + "/file/" + saveUrl;
try {
minioClient.putObject(minioConfig.getBucket(), saveUrl, file.getInputStream(), contentType);
minioClient.putObject(PutObjectArgs.builder().bucket(minioConfig.getBucket()).object(saveUrl).stream(file.getInputStream(), file.getSize(), -1).contentType(contentType).build());
// minioClient.putObject(minioConfig.getBucket(), saveUrl, file.getInputStream(), contentType);
} catch (Exception e) {
e.printStackTrace();
}
......@@ -101,28 +103,35 @@ public class MinioUtil {
* @throws Exception
*/
public void removeObject(String bucketName, String objectName) throws Exception {
minioClient.removeObject(bucketName, objectName);
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
}
/**
* 批量删除附件
* @param bucketName 存储桶名称
*
* @param bucketName 存储桶名称
* @param objectNames 附件存储路径集合
*/
public Iterable batchRemove(String bucketName,Iterable<String> objectNames){
return minioClient.removeObjects(bucketName, objectNames);
public Iterable<Result<DeleteError>> batchRemove(String bucketName, List<String> objectNames) {
List<DeleteObject> objects = new ArrayList<>(objectNames.size());
for (String objectName : objectNames) {
objects.add(new DeleteObject(objectName));
}
Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(objects).build());
return results;
}
/**
* 通过输入流上传到minio
*
* @param inputStream 文件输入流
* @param fileName 文件名,去除后缀名
* @param expandName 带.后缀名
* @param fileSize 文件大小
* @param fileName 文件名,去除后缀名
* @param expandName 带.后缀名
* @param fileSize 文件大小
* @return
* @throws IOException
*/
public FileAttribute transferToMinio(InputStream inputStream, String fileName, String expandName,String fileSize) throws IOException {
public FileAttribute transferToMinio(InputStream inputStream, String fileName, String expandName, String fileSize) throws IOException {
String savePath = FileAttachmentUtil.getSavePath(UUID.randomUUID().toString());
String contentType = contentTypeMap.get(expandName.toLowerCase());
// 下载地址
......@@ -130,7 +139,8 @@ public class MinioUtil {
// 浏览器直接预览地址,针对图片
String pUrl = minioConfig.getType() + minioConfig.getEndpoint() + "/file/" + saveUrl;
try {
minioClient.putObject(minioConfig.getBucket(), saveUrl, inputStream, contentType);
minioClient.putObject(PutObjectArgs.builder().bucket(minioConfig.getBucket()).object(saveUrl).stream(inputStream, Long.parseLong(fileSize),-1).contentType(contentType).build());
// minioClient.putObject(minioConfig.getBucket(), saveUrl, inputStream, contentType);
} catch (Exception e) {
e.printStackTrace();
}
......
......@@ -43,7 +43,7 @@ public class DgFileController {
@ApiOperation(value = "批量删除档案文件信息和附件")
public Result deleteDgFileByIds(@ApiParam("档案文件信息ID列表") @RequestBody List<String> bsmFileList) {
try {
if (dgfileService.delete(bsmFileList)) {
if (dgfileService.deleteFile(bsmFileList)) {
return Result.ok("删除成功");
}
} catch (Exception e) {
......
......@@ -28,10 +28,5 @@ public interface DgFileMapper extends BaseMapper<DgFileDO> {
*/
List<DgCatalogWithFileVO> getFileList(@Param("bsmArchive") String bsmArchive);
// /**
// * 更新排序
// * @param requests
// * @return
// */
// int updateFileSort(@Param("requests") List<UpdateDgFileRequest> requests);
List<DgFileDO> getFilesById(@Param("bsmFiles") List<String> bsmFiles);
}
......
......@@ -56,7 +56,7 @@ public interface DgFileService extends IService<DgFileDO> {
* @param bsmFileList
* @return
*/
boolean delete(List<String> bsmFileList) throws Exception;
boolean deleteFile(List<String> bsmFileList) throws Exception;
/**
* 上传材料附件.材料附件信息入库
......
......@@ -11,6 +11,8 @@ import com.pashanhoo.file.entity.DgFileDO;
import com.pashanhoo.file.entity.vo.*;
import com.pashanhoo.file.mapper.DgFileMapper;
import com.pashanhoo.file.service.DgFileService;
import io.minio.Result;
import io.minio.messages.DeleteError;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -18,6 +20,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
......@@ -109,16 +112,19 @@ public class DgFileServiceImpl extends ServiceImpl<DgFileMapper, DgFileDO> imple
* @return
*/
@Override
public boolean delete(List<String> bsmFileList) throws Exception {
boolean flag = this.removeByIds(bsmFileList);
QueryWrapper<DgFileDO> fileWrapper = new QueryWrapper<>();
fileWrapper.lambda().in(DgFileDO::getBsmFile, bsmFileList);
List<DgFileDO> fileDOList = this.list(fileWrapper);
for (DgFileDO fileDO : fileDOList) {
minioUtil.removeObject(minioConfig.getBucket(),fileDO.getFjurl());
public boolean deleteFile(List<String> bsmFileList) throws Exception {
//删除minio文件
List<DgFileDO> fileDOList = dgfileMapper.getFilesById(bsmFileList);
List<String> urls = fileDOList.stream().map(DgFileDO::getFjurl).collect(Collectors.toList());
for (String url : urls) {
minioUtil.removeObject(minioConfig.getBucket(), url);
}
return flag;
// Iterable<Result<DeleteError>> results = minioUtil.batchRemove(minioConfig.getBucket(), urls);
//删除数据库记录
return this.removeByIds(bsmFileList);
}
/**
......
......@@ -43,16 +43,28 @@
</resultMap>
<select id="getFileList" resultMap="result">
select DF.*, DAC.XH as catalogXh, DAC.WJMC,DAC.BSM_CATALOG as bsmCatalog,DA.BSM_ARCHIVES
select DF.*, DAC.XH as catalogXh, DAC.WJMC, DAC.BSM_CATALOG as bsmCatalog, DA.BSM_ARCHIVES
from DG_FILE DF
right join DG_ARCHIVES_CATALOG DAC on DAC.BSM_CATALOG = DF.BSM_CATALOG
join DG_ARCHIVES DA on DAC.BSM_ARCHIVES = DA.BSM_ARCHIVES
right join DG_ARCHIVES_CATALOG DAC on DAC.BSM_CATALOG = DF.BSM_CATALOG
join DG_ARCHIVES DA on DAC.BSM_ARCHIVES = DA.BSM_ARCHIVES
<where>
<if test="bsmArchive != null and bsmArchive != ''">
DAC.BSM_ARCHIVES = #{bsmArchive,jdbcType=VARCHAR}
</if>
</where>
order by DF.XH,DAC.XH
order by DF.XH, DAC.XH
</select>
<select id="getFilesById" resultMap="BaseResultMap">
select *
from DG_FILE
where
BSM_FILE in
<if test="bsmFiles != null and bsmFiles.size() != 0">
<foreach collection="bsmFiles" item="bsmFile" open="(" close=")" separator=",">
#{bsmFile,jdbcType=VARCHAR}
</foreach>
</if>
</select>
<!--<update id="updateFileSort">-->
......