| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | | /** |
| | |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | |