经调试,在读取上传回调返回的消息内容时发现putObjectResult.ResponseStream
为null 代码片段:
// 读取上传回调返回的消息内容
private static string GetCallbackResponse(PutObjectResult putObjectResult)
{
string callbackResponse = null;
using (var stream = putObjectResult.ResponseStream)
{
var buffer = new byte[4 * 1024];
var bytesRead = stream.Read(buffer, 0, buffer.Length);
callbackResponse = Encoding.Default.GetString(buffer, 0, bytesRead);
}
return callbackResponse;
}
//断点续传上传文件
UploadObjectRequest request = new UploadObjectRequest(bucketName, objectName, localFilename)
{
PartSize = 8 * 1024 * 1024,
ParallelThreadCount = 3,
CheckpointDir = checkpointDir,
};
var result = client.ResumableUploadObject(request);
responseContent = GetCallbackResponse(result);
调试截图:
本人水平有限,只知道这个ResponseStream
为null引发了这个异常,但具体也不知道为什么会为null,以及该怎么处理,希望各位路过的大佬指导一下,谢谢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云OSS(对象存储服务)的SDK中,PutObjectResult.ResponseStream
通常用于获取上传操作后服务器直接返回的数据流。然而,在你使用的场景中,是通过ResumableUploadObject
方法进行的断点续传上传,这个方法可能并不直接提供响应流,因为它涉及多个步骤和潜在的重试逻辑,与直接的PutObject
调用不同。
对于断点续传上传,回调信息或错误信息一般不会通过ResponseStream
传递,而是通过其他方式处理,比如异常或者特定的返回对象属性。根据你的代码片段,看起来你可能是在尝试读取一个并不存在的响应流,导致了null
引用异常。
查阅文档和API说明:首先,建议详细查阅阿里云OSS SDK的官方文档,特别是关于ResumableUploadObject
方法的说明部分,确认是否有回调信息处理的推荐做法。
检查错误码和异常:在执行ResumableUploadObject
之后,应该首先检查是否有异常抛出,这是处理错误的常规方式。如果上传成功,通常会直接得到一个没有问题的结果对象,而无需从响应流中读取额外信息。
使用事件/回调机制:如果你需要在上传过程中或完成后获得某些通知或信息,阿里云OSS SDK可能提供了事件监听或上传完成回调的机制。查看是否可以通过设置上传请求的事件处理器来获取你需要的信息。
直接使用结果对象:对于上传成功与否的状态和其他相关信息,直接从ResumableUploadObject
返回的UploadObjectResult
对象中获取,而不是尝试读取响应流。
示例代码调整:鉴于上述分析,你可能不需要GetCallbackResponse
这个方法。直接使用上传后的结果对象进行后续逻辑处理即可。例如,你可以检查result.HttpStatusCode
来判断操作是否成功。
var result = client.ResumableUploadObject(request);
if (result.HttpStatusCode == HttpStatusCode.OK)
{
Console.WriteLine("文件上传成功");
// 这里可以添加更多成功的处理逻辑
}
else
{
Console.WriteLine($"文件上传失败,状态码:{result.HttpStatusCode}");
// 处理上传失败的情况
}
总之,由于ResumableUploadObject
的特性,直接依赖于ResponseStream
可能不是正确的做法。应依据官方文档和推荐实践来处理上传结果和任何预期的回调信息。