从文件复制到流的字节数为null - c#

我正在尝试将文件从Amazon s3复制到内存流,以便可以将其作为要下载的文件传递。

我正在从Amazon s3获取文件,但是当我尝试复制流时,我得到的是空值。

我已经检查了流在复制之前是否已关闭,但事实并非如此。

var ms = new MemoryStream();
try
{
    GetObjectRequest getObjectRequest = new GetObjectRequest();
    getObjectRequest.BucketName = Bucketname;
    getObjectRequest.Key = Keyname;

    var getObjectResponse = client.GetObjectAsync(getObjectRequest);
    getObjectResponse.Wait();
    getObjectResponse.Result.ResponseStream.CopyToAsync(ms);
    var len = ms.Length;

    return File(ms.ToArray(), System.Net.Mime.MediaTypeNames.Application.Pdf, "filename");
}

var len = ms.Length; 

的值为18。

那么为什么没有内容被读取。
请指出正确的方向。

参考方案

您的问题就在这里:

getObjectResponse.Result.ResponseStream.CopyToAsync(ms);

谁在等待那个Task完成?没有人,所以您在操作过程中返回。

总体而言,代码应为:

try
{
    GetObjectRequest getObjectRequest = new GetObjectRequest();
    getObjectRequest.BucketName = Bucketname;
    getObjectRequest.Key = Keyname;

    var getObjectResponse = await client.GetObjectAsync(getObjectRequest);
    await getObjectResponse.ResponseStream.CopyToAsync(ms);
    var len = ms.Length;

    return File(ms.ToArray(), System.Net.Mime.MediaTypeNames.Application.Pdf, "filename");
}

请注意,应正确使用await进行异步操作,尤其是在ASP.NET Core之类的Web框架中。

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

如何将POCO类传递给.NET Core配置 - c#

我正在进行.NET Core应用程序的集成测试,并且想要使用一些测试配置。我的配置是一个POCO类,该类通过appsettings.json配置,然后通过IOptions<T>使用。在我的测试中,我想使用该类的实例。这是代码: var mySettings = GetTestSettings(); // factory method return…

如何使用ASP.NET ViewState使用JavaScript - c#

我的页面中有UL,它为空。我开始使用JavaScript使用LI填充它。在回发阶段如何在asp.net中使用此新添加的动态数据?那是因为我的提交按钮是asp.net控件。我不想使用JS POST。谢谢 参考方案 我过去通过在隐藏字段中填充要发布的动态数据来完成此类操作,您可以-在回传之前触发JavaScript事件,该事件将数据从UL解析到隐藏字段中要么更新…

如何从.Net DLL获取公共出口列表? - c#

我可以使用“ dumpbin”和“ dll export”之类的工具来查看标准win32 DLL的公共入口点(“ exports”),例如Windows \ SYSTEM32 \ GDI32.dll。但是,当我在.Net DLL上使用这些相同的工具时,我看到的仅仅是 2000 .reloc 2000 .rsrc 48000 .text 我有一个C#/。Net…

将asp.net c#变量分配给javascript数组 - c#

我有2个工作部分的代码,需要将它们放在一起第1节-用户可以访问页面,查看和编辑数据库的内容,其中包括新闻文章,标题,相关链接等,我设法使其正常工作并将数据保存到数据库中第2条-该网站首页上的javascript新闻滚动器会写出一系列div,然后使用javascript和CSS对其进行旋转,使其看起来像在滚动,同样可以。新闻文章是从首页上硬编码的数组中提取的问…