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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 今天排查一个问题,走了一些弯路,总结一下,希望可以为后来者提供参考建议。 ##问题: XX反馈,使用OSS PostObject的callback没有发生回调。但是通过putobject用同样的callback是有回调发生的。客户怀疑我们的PostObject有问题。 ##排查: OSS回调流程为 客户端->OSS->应用服务器->客户端 ![image.png](http://at

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

问题:

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版代码

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
6月前
|
安全 网络安全 开发工具
对象存储oss使用问题之flutter使用http库进行post请求文件上传返回400如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
276 1
|
6月前
|
存储 API 对象存储
对象存储OSS产品常见问题之图片无法加载排查如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
658 0
|
6月前
|
JavaScript Java Serverless
函数计算中,这里是用的curl的方式,如何改用http的post方式请求?还有如何设置oss打包的zip的保存目录?
函数计算中,这里是用的curl的方式,如何改用http的post方式请求?还有如何设置oss打包的zip的保存目录?
200 0
|
存储 域名解析 安全
Nest 实现OSS 服务端签名直传并设置上传回调
Nest 实现OSS 服务端签名直传并设置上传回调
596 0
|
JavaScript 前端开发 Java
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
1168 0
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
|
移动开发 JSON JavaScript
阿里云OSS PostObject错误及排查详细版本
PostObject使用表单上传文件到OSS。PostObject的消息实体通过 多重表单格式multipart/form-data 编码,详细说明请参看 RFC 2388。Put Object中参数通过HTTP请求头传递,Post Object参数则作为消息体的表单域传递。
1812 0
|
运维 网络安全 对象存储
OSS线上业务突发回调失败
CallbackFailed回调失败,通常需要从网络层面或者回调服务本身查找原因,如果本地模拟无法复现则可以考虑使用一些公网的探测工具进行探测,并抓包分析。
1447 0
|
存储 监控 安全
OSS异常流量排查及防护
OSS适用于存储各种类型的静态资源。您在OSS中存储静态资源。当OSS生成流量大的异常流量时,可能是恶意引用黑客攻击或请求访问OSS资源的恶意IP引起的。针对上述情况,本文将向您展示如何定位异常流量以及如何保护流量。
1670 0
OSS异常流量排查及防护
|
API 对象存储
【OSS 排查方案-10 请求 OSS 返回 404】
什么是 404 404 标准的 http code 状态码,代表用户请求的资源在服务端不存在, 404 并不是一个异常状态码?而是一个正常的响应。换句话说 404 已经成为了一个结果,这种响应常见在 client 端下载 OSS 的资源时出现。
【OSS 排查方案-10 请求 OSS 返回 404】
|
存储 弹性计算 安全
OSS 可用性诊断排查
本文主要介绍遇到 OSS 可用性异常的排查方法
3315 0
下一篇
无影云桌面