ruoyi-api/ruoyi-api-system/lib/aws-java-sdk-s3.jarBinary files differ
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> 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); } 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()); } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/HuaWeiOBSUtil.java
File was deleted 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 -> { 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; } } 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> 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()); } } } ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/StateCloudObsUtil.java
File was renamed from ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/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; } } 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); 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>