加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在处理响应后使用Amazon S3响应流

发布时间:2020-12-15 08:06:59 所属栏目:百科 来源:网络整理
导读:我正在使用亚马逊SDK,我有一个方法可以返回存储在Amazon S3服务中的对象的Stream. 它包含这样的东西: var request = new GetObjectRequest().WithBucketName(bucketName).WithKey(keyName);using (var response = client.GetObject(request)){ return respo
我正在使用亚马逊SDK,我有一个方法可以返回存储在Amazon S3服务中的对象的Stream.

它包含这样的东西:

var request = new GetObjectRequest().WithBucketName(bucketName).WithKey(keyName);
using (var response = client.GetObject(request))
{
    return response.ResponseStream;
}

显然,在执行此操作时,流不能从调用方法中读取,因为已经处理了请求对象,并且当完成此操作时,它将关闭流.

我不想将文件下载到MemoryStream或FileStream.

如果我不使用using子句,垃圾收集器将在某个时候处置请求对象,所以我不能不使用它.

我要问的是,有没有办法将Stream包装或复制到另一个Stream然后返回它而不必下载文件?

我正在使用.NET 3.5.

编辑:该方法继承自抽象类,调用方法不知道它与Amazon一起使用.所以它有一个返回流.

解决方法

在处理完流后,您无法使用流,但是可以推迟处理响应对象,直到使用响应流为止.我可以建议三种选择.

>退货响应.一种选择是将响应对象返回给调用者.调用者可以访问包含的响应流,然后在完成后处理响应.这是最简单的更改,但也需要调用者进行更改.>包裹流.不是直接返回响应流,而是创建一个新对象,该对象扩展Stream并包装响应流,但也有一个对响应本身的引用.然后,当您的包装器被丢弃时,您可以在内部处置响应对象.这只需要更改被调用的代码,只要返回的类型只是Stream.>回调.不要从方法返回任何内容并使用回调机制.接受动作< Stream>作为参数并使用流调用此回调.这样调用了调用者代码,您仍然可以控制处理响应和流.这是最安全的机制,因为您不依赖于调用者处理任何内容,但需要进行大多数更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读