From 18bdff5e42bc010f71d4a0820707e29b4c8500f9 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期一, 20 一月 2025 11:32:31 +0800 Subject: [PATCH] bug修改 --- manage/src/main/java/com/jilongda/manage/controller/TCouponController.java | 131 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 123 insertions(+), 8 deletions(-) diff --git a/manage/src/main/java/com/jilongda/manage/controller/TCouponController.java b/manage/src/main/java/com/jilongda/manage/controller/TCouponController.java index e7715b0..df84469 100644 --- a/manage/src/main/java/com/jilongda/manage/controller/TCouponController.java +++ b/manage/src/main/java/com/jilongda/manage/controller/TCouponController.java @@ -1,10 +1,18 @@ package com.jilongda.manage.controller; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.common.utils.BinaryUtil; +import com.aliyun.oss.model.MatchMode; +import com.aliyun.oss.model.OSSObject; +import com.aliyun.oss.model.PolicyConditions; +import com.aliyun.oss.model.PutObjectResult; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jilongda.common.basic.ApiResult; import com.jilongda.common.basic.PageInfo; import com.jilongda.common.utils.UUIDUtil; +import com.jilongda.manage.component.AliOssMange; import com.jilongda.manage.dto.TModelDTO; import com.jilongda.manage.model.TAppUser; import com.jilongda.manage.model.TCoupon; @@ -28,22 +36,18 @@ import org.springframework.mock.web.MockMultipartFile; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -188,5 +192,116 @@ return multipartFile; } + @ApiOperation(value = "服务端上传", notes = "服务端上传") + @PostMapping(value = "upload") + public ApiResult<String> fileUpload(@RequestParam(value = "file") MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + String filename = System.currentTimeMillis() + file.getOriginalFilename(); + // Endpoint以杭州为例,其它Region请按实际情况填写。 + final String endpoint = AliOssMange.endpoint; + // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 + final String accessKeyId = AliOssMange.accessKeyId; + final String accessKeySecret = AliOssMange.accessKeySecret; + final String bucketName = AliOssMange.bucketName; + // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 + String objectName = AliOssMange.dir + filename; + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 + // InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt"); + // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。 + PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream); + OSSObject ossObject = ossClient.getObject(bucketName, objectName); + String uri = ossObject.getResponse().getUri(); + // 关闭OSSClient。 + ossClient.shutdown(); +// uri = uri.replace("http://nn-bucket.oss-cn-shanghai.aliyuncs.com",FILE_CDN); + return ApiResult.okmsg(uri); + } + + + @ApiOperation(value = "服务端签名后直传", notes = "服务端签名后直传") + @PostMapping("signature") + public ApiResult<Map<String, String>> signature() { + OSS builder = new OSSClientBuilder().build(AliOssMange.endpoint, AliOssMange.accessKeyId, AliOssMange.accessKeySecret); + long expireTime = 30; + long expireEndTime = System.currentTimeMillis() + expireTime * 1000; + Date expiration = new Date(expireEndTime); + PolicyConditions policyConds = new PolicyConditions(); + policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); + policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, AliOssMange.dir); + String postPolicy = builder.generatePostPolicy(expiration, policyConds); + byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8); + String encodedPolicy = BinaryUtil.toBase64String(binaryData); + String postSignature = builder.calculatePostSignature(postPolicy); + Map<String, String> respMap = new LinkedHashMap<>(6); + respMap.put("accessid", AliOssMange.accessKeyId); + respMap.put("policy", encodedPolicy); + respMap.put("signature", postSignature); + // 示例为dir + respMap.put("dir", AliOssMange.dir); + // 前端为key + // respMap.put("key", AliOssMange.dir); + respMap.put("host", AliOssMange.host); +// respMap.put("cdn", AliOssMange.cdn); + respMap.put("expire", String.valueOf(expireEndTime / 1000)); +// // 回调 +// if (StringUtils.hasLength(AliOssMange.callbackUrl)) { +// JSONObject jasonCallback = new JSONObject(); +// jasonCallback.put("callbackUrl", AliOssMange.callbackUrl); +// String callbackBody = "{\"filename\":${object},\"size\":${size},\"mimeType\":${mimeType}}"; +// jasonCallback.put("callbackBody", callbackBody); +// jasonCallback.put("callbackBodyType", "application/json"); +// String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes()); +// respMap.put("callback", base64CallbackBody); +// } + +// HttpServletResponse response = WebUtils.response(); +// assert response != null; +// response.setHeader("Access-Control-Allow-Origin", "*"); +// response.setHeader("Access-Control-Allow-Methods", "GET, POST"); + + // 关闭OSSClient。 + builder.shutdown(); + return ApiResult.success(respMap); + } + + @ApiOperation(value = "服务端上传(二进制字符串)", notes = "服务端上传") + @PostMapping(value = "str/upload") + public String strUpload(InputStream inputStream, String filename) throws IOException { + //String filename = System.currentTimeMillis() + CodeGenerateUtils.generateVolumeSn()+".jpg"; + // Endpoint以杭州为例,其它Region请按实际情况填写。 + final String endpoint = AliOssMange.endpoint; + // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 + final String accessKeyId = AliOssMange.accessKeyId; + final String accessKeySecret = AliOssMange.accessKeySecret; + final String bucketName = AliOssMange.bucketName; + // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 + String objectName = AliOssMange.dir + filename; + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 + // InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt"); + // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。 + PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream); + OSSObject ossObject = ossClient.getObject(bucketName, objectName); + String uri = ossObject.getResponse().getUri(); + // 关闭OSSClient。 + ossClient.shutdown(); + return uri; + } + + /** + * oss上传成功回调 + * + * @param callback + * @return + */ + @ApiOperation(value = "oss回调", notes = "oss回调") + @PostMapping(value = "/callback") + public ApiResult callback(@RequestBody Map<String, Object> callback) { + String filename = "http://".concat(AliOssMange.bucketName).concat(".").concat(AliOssMange.endpoint).concat("/").concat(callback.get("filename").toString()); + return ApiResult.okmsg(filename); + } } -- Gitblit v1.7.1