From 06f59ebb282ab74565585f77dde772d228d6075a Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期二, 18 六月 2024 14:13:10 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/forepart/ForepartMemberController.java | 11 + /dev/null | 90 ------------------ ruoyi-modules/ruoyi-file/pom.xml | 10 + ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java | 17 +++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java | 12 + ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java | 78 ++++++++++++++- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java | 8 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java | 11 + ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java | 4 ruoyi-api/ruoyi-api-system/pom.xml | 8 - ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/StateCloudObsUtil.java | 40 +++++++ 11 files changed, 161 insertions(+), 128 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/lib/aws-java-sdk-s3.jar b/ruoyi-api/ruoyi-api-system/lib/aws-java-sdk-s3.jar deleted file mode 100644 index e4254fb..0000000 --- a/ruoyi-api/ruoyi-api-system/lib/aws-java-sdk-s3.jar +++ /dev/null Binary files differ diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml index 1c3f322..dba587c 100644 --- a/ruoyi-api/ruoyi-api-system/pom.xml +++ b/ruoyi-api/ruoyi-api-system/pom.xml @@ -39,14 +39,6 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> - - <dependency> - <groupId>aws-java-sdk-s3</groupId> - <artifactId>aws</artifactId> - <version>1.0.0</version> - <scope>system</scope> - <systemPath>${project.basedir}/lib/aws-java-sdk-s3.jar</systemPath> - </dependency> </dependencies> </project> \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java index ed49e2c..5ff0a3d 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java @@ -1,14 +1,14 @@ package com.ruoyi.system.api; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.SysFile; +import com.ruoyi.system.api.factory.RemoteFileFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.multipart.MultipartFile; -import com.ruoyi.common.core.constant.ServiceNameConstants; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.system.api.domain.SysFile; -import com.ruoyi.system.api.factory.RemoteFileFallbackFactory; /** * 文件服务 @@ -26,4 +26,7 @@ */ @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file); + + @PostMapping(value = "/obs/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R<String> obsUpload(@RequestPart("file") MultipartFile file); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java index 41def87..d1eabaa 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java @@ -1,13 +1,13 @@ package com.ruoyi.system.api.factory; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.RemoteFileService; +import com.ruoyi.system.api.domain.SysFile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.system.api.RemoteFileService; -import com.ruoyi.system.api.domain.SysFile; /** * 文件服务降级处理 @@ -30,6 +30,12 @@ { return R.fail("上传文件失败:" + throwable.getMessage()); } + + @Override + public R<String> obsUpload(MultipartFile file) { + return R.fail("obs上传文件失败:" + throwable.getMessage()); + } }; } + } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/HuaWeiOBSUtil.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/HuaWeiOBSUtil.java deleted file mode 100644 index 5f6713c..0000000 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/HuaWeiOBSUtil.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.ruoyi.system.api.util; - -import com.obs.services.ObsClient; -import com.obs.services.model.ObjectMetadata; -import java.io.IOException; -import java.io.InputStream; -import java.util.UUID; -import org.springframework.web.multipart.MultipartFile; - -public class HuaWeiOBSUtil { - - //TODO 修改配置文件 - //OBS图片访问域名 - public static String endPoint = "obs.cn-southwest-2.myhuaweicloud.com"; - public static String accessKeyId = "IZB26ZHC7C5MWIOH1TGE"; - public static String accessKeySecret = "y5PXhFMDOHiPH0nnQMz4gkvA63oqKAC621zXzOPk"; - public static String bucketName = "mimishejiao"; - public static String oss_domain = "https://mimishejiao.obs.cn-southwest-2.myhuaweicloud.com/"; - - // 创建ObsClient实例 - public static ObsClient obsClient = new ObsClient(accessKeyId, accessKeySecret, endPoint); - - public static String obsUpload(MultipartFile file) - throws IOException { - //CommonsMultipartFile file = (CommonsMultipartFile)multipartFile; - String fileName = ""; - if (file != null && !"".equals(file.getOriginalFilename()) - && file.getOriginalFilename() != null) { - InputStream content = file.getInputStream();//获得指定文件的输入流 - ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata - meta.setContentLength(file.getSize()); // 必须设置ContentLength - String originalFilename = file.getOriginalFilename(); - fileName = - UUID.randomUUID().toString().replaceAll("-", "") + originalFilename.subSequence( - originalFilename.lastIndexOf("."), originalFilename.length()); - obsClient.putObject(bucketName, fileName, content, meta);// 上传Object. - if (fileName != null && !"".equals(fileName)) { - System.out.println(fileName); - fileName = oss_domain + fileName; - } - } - return fileName; - } - - public static String obsUploadStream(String code, InputStream content) throws IOException { - String fileName = ""; - ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata - fileName = UUID.randomUUID().toString().replaceAll("-", "") + "-id" + code + ".png"; - obsClient.putObject(bucketName, "qrCode/" + fileName, content, meta);// 上传Object. - if (fileName != null && !"".equals(fileName)) { - System.out.println(fileName); - fileName = oss_domain + "qrCode/" + fileName; - } - return fileName; - } - /** - * 删除某个Object - * - * @param bucketUrl - * @return - */ - public static boolean deleteObject(String bucketUrl) { - try { - bucketUrl = bucketUrl.replace(oss_domain, ""); - // 删除Object. - obsClient.deleteObject(bucketName, bucketUrl); - } catch (Exception e) { - e.printStackTrace(); - return false; - } finally { -// obsClient.shutdown(); - } - return true; - } - -// public static void createBucket(String bucketName) -// { -// //初始化 OSSClient -//// ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret); -// -// // 新建一个Bucket -// Bucket bucket = ossClient.createBucket(bucketName); -// System.out.println(bucket.getName()); -// System.out.println(bucket.getCreationDate()); -// } -// -// public static void main(String[] args) { -// OssUploadUtil.createBucket("ssfdfsd"); -// } -} diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java index 49c6355..25a006c 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java @@ -54,6 +54,7 @@ import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.system.api.RemoteFileService; import com.ruoyi.system.api.constants.NotificationTypeConstant; import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.AuctionGoods; @@ -159,6 +160,8 @@ @Resource private AuctionBidRecordMapper auctionBidRecordMapper; + @Resource + private RemoteFileService remoteFileService; public static RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build(); // 配置您申请的KEY,在个人中心->我的数据,接口名称上方查看 public static final String APPKEY = ""; @@ -776,8 +779,9 @@ // 生成唯一编号 Long nextId = IDhelper.getNextId(); auctionSalesroom.setAuctionSalesroomNo(nextId.toString()); - String qrCodeToObs = CreateQrCode.createQRCodeToObs(nextId.toString()); - auctionSalesroom.setQrCode(qrCodeToObs); + String url = remoteFileService.obsUpload( + CreateQrCode.createQRCodeStream(nextId.toString())).getData(); + auctionSalesroom.setQrCode(url); // 添加 this.save(auctionSalesroom); List<GoodsStockUpdDTO> goodsStockUpdDTOS = auctionSalesroomGoods.stream().map(item -> { diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java index 6ba60d0..b6329af 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java @@ -5,18 +5,23 @@ import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; -import com.ruoyi.system.api.util.HuaWeiOBSUtil; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.Base64; import java.util.HashMap; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.springframework.http.MediaType; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartFile; public class CreateQrCode { private static final String base64Url = "data:image/png;base64,"; - /** * 创建二维码 * @@ -48,7 +53,8 @@ * @throws IOException * @throws WriterException */ - public static String createQRCodeToObs(String json) throws IOException, WriterException { + public static MultipartFile createQRCodeStream(String json) + throws IOException, WriterException { QRCodeWriter qrCodeWriter = new QRCodeWriter(); HashMap<EncodeHintType, Object> hints = new HashMap<>(); @@ -56,13 +62,69 @@ BitMatrix bitMatrix = qrCodeWriter.encode(json, BarcodeFormat.QR_CODE, 600, 600, hints); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream); - InputStream is = new ByteArrayInputStream( + InputStream byteArrayInputStream = new ByteArrayInputStream( outputStream.toByteArray()); - return HuaWeiOBSUtil.obsUploadStream(json, is); + // byteArrayInputStream 转MultipartFile + + return getMultipartFile(byteArrayInputStream, json + ".png"); } - public static void main(String[] args) throws IOException, WriterException { - String qrCodeToObs = createQRCodeToObs("123456"); - System.out.println(qrCodeToObs); + /** + * 获取封装得MultipartFile + * + * @param inputStream inputStream + * @param fileName fileName + * @return MultipartFile + */ + public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) { + FileItem fileItem = createFileItem(inputStream, fileName); + // CommonsMultipartFile是feign对multipartFile的封装,但是要FileItem类对象 + return new CommonsMultipartFile(fileItem); + } + + + /** + * FileItem类对象创建 + * + * @param inputStream inputStream + * @param fileName fileName + * @return FileItem + */ + public static FileItem createFileItem(InputStream inputStream, String fileName) { + FileItemFactory factory = new DiskFileItemFactory(16, null); + String textFieldName = "file"; + FileItem item = factory.createItem(textFieldName, MediaType.MULTIPART_FORM_DATA_VALUE, true, + fileName); + int bytesRead = 0; + byte[] buffer = new byte[10 * 1024 * 1024]; + OutputStream os = null; + // 使用输出流输出输入流的字节 + try { + os = item.getOutputStream(); + while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { + os.write(buffer, 0, bytesRead); + } + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + if (os != null) { + try { + os.close(); + } catch (IOException e) { + throw new RuntimeException(e); + + } + } + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + return item; } } \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-file/pom.xml b/ruoyi-modules/ruoyi-file/pom.xml index 1d41d8f..a67a7bb 100644 --- a/ruoyi-modules/ruoyi-file/pom.xml +++ b/ruoyi-modules/ruoyi-file/pom.xml @@ -65,7 +65,15 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> </dependency> - + + <dependency> + <groupId>aws-java-sdk-s3</groupId> + <artifactId>aws</artifactId> + <version>1.0.0</version> + <scope>system</scope> + <systemPath>${project.basedir}/lib/aws-java-sdk-s3.jar</systemPath> + </dependency> + </dependencies> <build> diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java index 5e0c4e0..3a8113f 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java @@ -3,15 +3,17 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.file.FileUtils; import com.ruoyi.file.service.ISysFileService; +import com.ruoyi.file.utils.StateCloudObsUtil; import com.ruoyi.system.api.domain.SysFile; -import com.ruoyi.system.api.util.StateCloudObsUtil; import io.swagger.annotations.ApiOperation; +import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -86,4 +88,17 @@ return R.fail(e.getMessage()); } } + + @PostMapping("/obs/upload/stream") + public R<String> obsUpload(@RequestParam("code") String code, + @RequestParam("stream") InputStream stream) { + try { + // 上传并返回访问地址 + String url = StateCloudObsUtil.obsUploadStream(code, stream); + return R.ok(url); + } catch (Exception e) { + log.error("上传文件失败", e); + return R.fail(e.getMessage()); + } + } } \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/StateCloudObsUtil.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/StateCloudObsUtil.java similarity index 62% rename from ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/StateCloudObsUtil.java rename to ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/StateCloudObsUtil.java index 84a99b5..cf1bb7e 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/StateCloudObsUtil.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/StateCloudObsUtil.java @@ -1,4 +1,4 @@ -package com.ruoyi.system.api.util; +package com.ruoyi.file.utils; import com.amazonaws.ClientConfiguration; import com.amazonaws.Protocol; @@ -29,7 +29,8 @@ public static String END_POINT = "obs.cn-sccd1.ctyun.cn"; public static String BUCKET = "jyzx-obs"; public static String DOMAIN = "https://" + BUCKET + "." + END_POINT + "/"; - + public static AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, + SECRET_KEY); public static String uploadFile(MultipartFile file) { String originalFilename = file.getOriginalFilename(); @@ -42,8 +43,6 @@ String fileName; AmazonS3 s3client = null; try { - AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, - SECRET_KEY); ClientConfiguration awsClientConfig = new ClientConfiguration(); awsClientConfig.setSignerOverride("AWSS3V4SignerType"); awsClientConfig.setProtocol(Protocol.HTTP); @@ -73,4 +72,37 @@ } return null; } + + public static String obsUploadStream(String code, InputStream content) throws IOException { + String fileName = ""; + ObjectMetadata objectMetadata = new ObjectMetadata();// 创建上传Object的Metadata + fileName = "qrCode/" + UUID.randomUUID().toString().replaceAll("-", "") + "-id" + code + + ".png"; + AmazonS3 s3client = null; + try { + ClientConfiguration awsClientConfig = new ClientConfiguration(); + awsClientConfig.setSignerOverride("AWSS3V4SignerType"); + awsClientConfig.setProtocol(Protocol.HTTP); + s3client = AmazonS3ClientBuilder.standard() + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withClientConfiguration(awsClientConfig) + .withEndpointConfiguration(new EndpointConfiguration(END_POINT, "")) + .disableChunkedEncoding() + .enablePathStyleAccess() + .build(); + System.out.print("=====connect success=====\n"); + // 上传 object + PutObjectRequest request = new PutObjectRequest(BUCKET, fileName, content, + objectMetadata); + PutObjectResult result = s3client.putObject(request); + System.out.format("Etag: %s, versionId: %s\n", result.getETag(), + result.getVersionId()); + System.out.print("=====request success=====\n"); + return DOMAIN + fileName; + } catch (Exception e) { + System.out.print("=====request fail=====\n"); + System.out.print(e.getMessage()); + } + return fileName; + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/forepart/ForepartMemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/forepart/ForepartMemberController.java index 13d88d2..820a605 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/forepart/ForepartMemberController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/forepart/ForepartMemberController.java @@ -2,12 +2,15 @@ import com.ruoyi.common.core.domain.R; -import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.member.service.IMemberService; +import com.ruoyi.system.api.RemoteFileService; import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.CustomConfigDTO; +import com.ruoyi.system.api.domain.dto.MemberDTO; +import com.ruoyi.system.api.domain.dto.MobileDTO; import com.ruoyi.system.api.feignClient.SysUserClient; -import com.ruoyi.system.api.util.HuaWeiOBSUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; @@ -37,6 +40,8 @@ @Resource private SysUserClient sysUserClient; + @Resource + private RemoteFileService remoteFileService; @PostMapping("/miniLogin") @ApiOperation(value = "用户端-第三方登陸") public R<AppMiniLoginVO> loginThird(@RequestBody AppMiniLoginDTO appMiniLoginDto) { @@ -67,7 +72,7 @@ try { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile file = (MultipartFile) multipartRequest.getFile("images"); - String url=HuaWeiOBSUtil.obsUpload(file); + String url = remoteFileService.obsUpload(file).getData(); Member member=new Member(); member.setAvatar(url); return R.ok(member); diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java index 91e39eb..531ee51 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java @@ -33,10 +33,7 @@ import com.ruoyi.system.api.domain.vo.OrderReturnVO; import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.SysUserClient; -import com.ruoyi.system.api.util.HuaWeiOBSUtil; -import java.io.IOException; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -47,7 +44,6 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; /** * <p> -- Gitblit v1.7.1