AliYun OSS 图片上传回调

  • pom.xml
        <!-- 阿里云oss -->
		<dependency>
			<groupId>com.aliyun.oss</groupId>
			<artifactId>aliyun-sdk-oss</artifactId>
			<version>3.10.2</version>
		</dependency>
		<dependency>
			<groupId>com.aliyun</groupId>
			<artifactId>aliyun-java-sdk-imageseg</artifactId>
			<version>1.1.9</version>
		</dependency>
		<!-- 图片转MockMultipartFile -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.1.6.RELEASE</version>
			<scope>compile</scope>
		</dependency>

  • 获取前端上传参数返回给前端,
    callbackBody可自动自定义参数在回调接口接收
public static Map<String, String> getUploadParams(String userId) {

        OSSClient client = new OSSClient(END_POINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        try {
            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, FILE_DIR);
            String postPolicy = client.generatePostPolicy(expiration, policyConds);
            byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8);
            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
            String postSignature = client.calculatePostSignature(postPolicy);
            Map<String, String> respMap = new LinkedHashMap<>();
            respMap.put("accessid", ACCESS_KEY_ID);
            respMap.put("policy", encodedPolicy);
            respMap.put("signature", postSignature);
            respMap.put("dir", FILE_DIR);
            respMap.put("host", HOST);
            String name = UUIDGenerator.getUUID(8) + "_";
            respMap.put("name", name + TimeUtils.getCurrentTime() + ".png");
            respMap.put("expire", String.valueOf(expireEndTime / 1000));
            JSONObject jasonCallback = new JSONObject();
            jasonCallback.put("callbackUrl", CALLBACK_URL);
            Map<String, Object> map = new HashMap<>();
            map.put("userId", userId);
            map.put("fileUrl", FILE_DIR + name + TimeUtils.getCurrentTime() + ".png");
            jasonCallback.put("callbackBody", JSON.toJSONString(map));
            jasonCallback.put("callbackBodyType", "application/json");
            String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
            respMap.put("callback", base64CallbackBody);
            System.out.println(JSON.toJSONString(respMap));
            return respMap;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
            return null;
        }
    }
  • 回调接口 :返回给前端的参数写在这里
public JSONObject callBack(JSONObject jsonObject) {
        JSONObject result = new JSONObject();
        try {
            PortraitSplitLog log = new PortraitSplitLog();
            String request = jsonObject.toJSONString();
            System.out.println("=====callback\n" + request);
            String imageUrl = jsonObject.getString("fileUrl");
            String userId = jsonObject.getString("userId");
            log.setOriginalUrl(imageUrl);
            log.setUserId(userId);
            log.setDateline(TimeUtils.getCurrentUnixTime());
            RestResult restResult = AliYunOSSUtils.portraitSplit(imageUrl);
            if (restResult.getCode() != 200) {
                result.put("message", restResult.getMessage());
                result.put("status", "err");
                log.setErrMsg(restResult.getMessage());
                return result;
            }
            JSONObject object = JSONObject.parseObject(restResult.getData().toString());
            log.setResult(object.toJSONString());
            String requestId = object.getString("requestId");
            log.setRequestId(requestId);
            JSONObject dataObject = object.getJSONObject("data");
            System.out.println("dataObject=" + dataObject);
            JSONArray elArray = dataObject.getJSONArray("elements");
            System.out.println(elArray.size());
            if (elArray.size() > 1) {
                System.out.println("请上传单人照片进行识别");
                result.put("message", "请上传单人照片进行识别");
                result.put("status", "err");
                log.setErrMsg(restResult.getMessage());
                return result;
            }
            JSONObject o = (JSONObject) elArray.get(0);
            String url = o.getString("imageURL");
            String splitUrl = AliYunOSSUtils.uploadImageWithUrl(url, imageUrl);
            Long w = o.getLong("width");
            Long h = o.getLong("height");
            Long x = o.getLong("x");
            Long y = o.getLong("y");
            log.setSplitUrl(splitUrl);
            log.setWidth(w);
            log.setHeight(h);
            log.setX(x);
            log.setY(y);
            portraitSplitLogService.add(log);
            result.put("data", log.getSplitUrl());
            result.put("status", "ok");
        } catch (Exception e) {
            e.printStackTrace();
            result.put("message", "处理过程出错");
            result.put("status", "ok");
        }
        return result;
    }
  •  阿里云人脸分割
 public static RestResult portraitSplit(String imageUrl) {
        try {
            DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
            IAcsClient client = new DefaultAcsClient(profile);
            SegmentHeadRequest request = new SegmentHeadRequest();
            request.setRegionId(REGION_ID);
            request.setImageURL(HOST + "/" + imageUrl);
            request.setReturnForm("PNG");
            SegmentHeadResponse response = client.getAcsResponse(request);
            JSONObject object = JSONObject.parseObject(JSON.toJSONString(response));
            return RestResult.ok(object);
        } catch (com.aliyuncs.exceptions.ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            if ("InvalidFile.Content".equals(e.getErrCode())) {//输入图像内容不合法。例如:1输入的image是空字符串。2无效的base64编码图像。3无效的image content。
                return RestResult.error("没有识别到人脸,请重新选择图片");
            }
            if ("InvalidImage.Download".equals(e.getErrCode())) {
                return RestResult.error("图片下载失败");
            }
            if ("InvalidParameter".equals(e.getMessage())) {
                return RestResult.error("图片处理参数有误");
            }
            return RestResult.error("图片分割失败,请重新上传");
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot可以通过整合阿里云OSS对象存储服务来实现文件上传和管理功能。具体实现可以参考以下步骤: 1. 在service层定义FileService接口,该接口包含上传文件到阿里云OSS的方法。例如,可以使用MultipartFile作为参数,返回上传成功后的文件URL。 2. 在controller层编写FileApiController类,该类使用@RestController注解标识为控制器,并使用@RequestMapping注解指定请求路径。在该类中,通过@Autowired注入FileService,并在文件上传的接口方法中调用FileService的上传文件方法并返回上传成功后的文件URL。 3. 在配置文件中配置阿里云OSS的相关信息,包括accessKey、secretKey、bucketName等。可以使用SpringBoot提供的@ConfigurationProperties注解来读取配置文件中的信息。 4. 在pom.xml文件中添加阿里云OSS SDK的依赖。 5. 编写上传文件的前端界面,可以使用HTML或者前端框架如Vue.js、React等。 通过以上步骤的实现,SpringBoot就可以整合阿里云OSS对象存储服务,实现文件上传和管理功能。这样可以将文件存储在阿里云OSS中,提高文件的安全性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合阿里云OSS对象存储服务的实现](https://download.csdn.net/download/weixin_38649091/12721580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [全网最详细SpringBoot、SpringCloud整合阿里云OSS对象存储服务](https://blog.csdn.net/weixin_55076626/article/details/127924003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值