OSS PostObject未发生回调的问题排查

news/2024/7/16 6:06:27 标签: java, json, 后端

今天排查一个问题,走了一些弯路,总结一下,希望可以为后来者提供参考建议。

问题:

XX反馈,使用OSS PostObject的callback没有发生回调。但是通过putobject用同样的callback是有回调发生的。客户怀疑我们的PostObject有问题。

排查:

OSS回调流程为 客户端->OSS->应用服务器->客户端
image.png
创建一台ECS用于当测试应用服务器
创建一个asp.net 的ashx,代码自行实现,用于获取OSS callback参数。
写了两个上传demo

  1. Putobject (SDK上有示例https://help.aliyun.com/document_detail/32013.html)
PutObjectRequest putObjectRequest=new PutObjectRequest(bucketName, key, new ByteArrayInputStream(content.getBytes()), meta);
Callback callback = new Callback();
callback.setCallbackUrl("http://接收端IP/Revice.ashx");
callback.setCallbackBody("{\\\"mimeType\\\":${mimeType},\\\"size\\\":${size}}");
putObjectRequest.setCallback(callback);
        
ossClient.putObject(putObjectRequest)
  1. postobject(post demo,参考https://github.com/aliyun/aliyun-oss-java-sdk/blob/master/src/samples/PostObjectSample.java?spm=a2c4g.11186623.2.11.3bMYXb&file=PostObjectSample.java

关键代码:

File file = new File(localFile);
String filename = file.getName();
String contentType = new MimetypesFileTypeMap().getContentType(file);
if (contentType == null || contentType.equals("")) {
     contentType = "application/octet-stream";
}

StringBuffer strBuf = new StringBuffer();
strBuf.append("\r\n").append("--").append(boundary).append("\r\n");
strBuf.append("Content-Disposition: form-data; name=\"file\"; "+ "filename=\"" + filename + "\"\r\n");
strBuf.append("Content-Type: " + contentType + "\r\n\r\n");
out.write(strBuf.toString().getBytes());

//callback部分
StringBuffer strBuf1 = new StringBuffer();
String callback="{\"callbackUrl\":\"http://应用接收端IP/Revice.ashx\",\"callbackBody\":\"{\\\"bucket\\\"=${bucket},\\\"size\\\"=${size}}\"}";
byte[] textByte = callback.getBytes("UTF-8");
strBuf1.append("\r\n").append("--").append(boundary).append("\r\n");
String callbackstr=new String(Base64.encodeBase64(textByte));
strBuf1.append("Content-Disposition: form-data; name=\"callback\"\r\n\r\n" + callbackstr  + "\r\n\r\n");
out.write(strBuf1.toString().getBytes());
//callback部分
     
DataInputStream in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
     out.write(bufferOut, 0, bytes);
}
in.close();

byte[] endData = ("\r\n--" + boundary + "--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();

测试:

Put方式,应用服务器上有OSS的回调请求。
image.png

Post方式,应用服务器无任何回调请求
image.png
按理说,如果json格式有错误或者回调失败,都应该会返回对应的msg,而上传后一切成功但为什么没有发生回调呢,难道是bug?不太可能,如果是线上bug,工单早就爆了。

检查代码和OSS后端同学沟通。检查到在发送请求时callback的参数是在file下面。
image.png
这样就会作为file的一部分。调整一下位置
image.png
业务服务器上也如愿的抓到了请求
image.png

总结一下就是细心,还是细心。不要急躁多调试,最终会得到想得到的。

附件附上完整的postobject callback java版代码


http://www.niftyadmin.cn/n/1384726.html

相关文章

如何解除 Windows 8 中的 Modern Apps 网络隔离?

在 Windows 8 中,我们全新引入了 WinRT 平台,带给用户包含动态磁贴和沉浸式用户体验的 Modern Apps。 如果您是企业用户,有公司的代理服务器环境,或者您是开发人员,相信您已经发现了在本地连接更换代理后,所…

057 PHP unset()用法详解

unset() 销毁指定的变量。注意在 PHP 3 中,unset() 将返回 TRUE(实际上是整型值 1),而在 PHP 4 中,unset() 不再是一个真正的函数:它现在是一个语句。这样就没有了返回值,试图获取 unset() 的返…

JS的扩展方法

定义类静态方法扩展 来源 <http://blog.csdn.net/tuwen/article/details/11464693> aClass.sayHello function(){alert(say hello);}        aClass.sayHello() ;//aClass的静态方法 定义类对象方法扩展 aClass.prototype.protoSayHello function(){alert(proto…

跨交换机实现vlan实验报告

实验目的掌握如何在交换机上划分基于端口的vlan&#xff0c;给vlan添加端口&#xff0c;理解跨交换机之间vlan的特点。实验步骤1.用一根网线连接两个交换机1、2&#xff0c;再连接主机与交换机。2.进入交换机1设置界面设置好vlan&#xff0c;然后把交换机1与电脑&#xff0c;交…

android studio 获取edittext_Android 开发技术周报 Issue#22

新闻谷歌推迟Android 11 Beta发布[1]Android Studio 4.0发布 为Android 11做好准备[2]谷歌Pixel 4a XL外形首曝&#xff1a;新机夭折 不会发布[3]Play商城测试“看他人玩”区域 游戏页面显示相关视频[4]教程Kotlin Vocabulary | 揭秘协程中的 suspend 修饰符一种简单优雅的Text…

【笔记】字符串匹配算法

在进行搜索的时候&#xff0c;经常要使用到字符串匹配算法&#xff0c;下面总结几种字符串匹配的算法&#xff0c;以C#代码为例 1、BF匹配算法 最简单的匹配算法&#xff0c;时间复杂度为O(m*n)&#xff0c;原理&#xff1a;逐个匹配&#xff0c;若发现不匹配&#xff0c;则后移…

2. 详解 CSS 属性 - :before :after

之前写了一篇 《详解 CSS 属性 - :before && :after》 的博文&#xff0c;当时自己没分清楚伪元素和伪类&#xff0c;所以在文章内把概念混淆了&#xff0c;庆幸 riophae 兄指正了我的错误&#xff0c;所以今天打算好好研究下两者的区别。首先&#xff0c;阅读 w3c 对两…

2.28考试小记

翻车翻得厉害了点啊…… 上来看到第一题发现题目很简洁啊&#xff0c;一般来说简洁的题目都没好事&#xff0c;看了一下数据范围&#xff0c;果然只有20分的暴力分&#xff0c;努把力可能还有一点输出0的分。第二题博弈论&#xff0c;上来40分明显白送&#xff0c;读了几遍特殊…