C# 将来自HttpWebRequest的流组合在一起

C# 将来自HttpWebRequest的流组合在一起,c#,asp.net,stream,C#,Asp.net,Stream,我有一个Web服务,我需要从中使用文件。问题是这个webservice将API调用限制为100MB,但文件大于100MB。所以他们建议我们使用范围标题。我将范围添加到HttpWebRequest。我的问题似乎是合并这些流。我认为这是因为我无法创建ConnectSream的实例(我认为GetResponseStream会返回这个实例)。所以我必须创建一个MemoryStream。除非当我这样做时,我试图打开一个我上传的测试zip文件,但它不会打开。我将下载的文件与原始副本进行了比较,下载的文件中没

我有一个Web服务,我需要从中使用文件。问题是这个webservice将API调用限制为100MB,但文件大于100MB。所以他们建议我们使用范围标题。我将范围添加到HttpWebRequest。我的问题似乎是合并这些流。我认为这是因为我无法创建ConnectSream的实例(我认为GetResponseStream会返回这个实例)。所以我必须创建一个MemoryStream。除非当我这样做时,我试图打开一个我上传的测试zip文件,但它不会打开。我将下载的文件与原始副本进行了比较,下载的文件中没有实际数据,在十六进制视图中显示了所有0。如何修复此问题,以便合并两个流,然后将文件保存到磁盘

foreach (var largeFile in LargeFilesToDownload)
{
    Stream stream = new MemoryStream();

    while (endSize <= largeFile.Value)
    {
        try
        {
            HttpWebRequest downReq = (HttpWebRequest)HttpWebRequest.Create("https://webserviceurl/" + largeFile.Key);
            downReq.Headers.Add("Authorization", "Bearer " + API_TOKEN);
            downReq.AddRange(startSize, endSize);
            downReq.Method = "GET";
            using (var eresp2 = (HttpWebResponse)downReq.GetResponse())
            {
                eresp2.GetResponseStream().CopyTo(stream);
            }
        }
        catch (Exception exc)
        {
            //Handle Exception
        }
        //Set new startSize and endSize here
    }

    try
    {
        //check to make sure path exists here

        string path = SaveLocation + @"\" + rootDir + @"\" + Path.GetFileName(largeFile.Key);

        using (FileStream file = new FileStream(path, FileMode.Create, System.IO.FileAccess.Write))
        {
            byte[] bytes = new byte[stream.Length];
            stream.Read(bytes, 0, (int)stream.Length);
            file.Write(bytes, 0, bytes.Length);
            stream.Close();
        }
        FilesToDelete.Add(largeFile.Key);
    }
    catch (Exception ex2)
    {
        //Handle Exception
    }
}
foreach(LargeFilesToDownload中的var largeFile)
{
Stream=新的MemoryStream();

虽然(endSize您如何设置开始和结束大小?您如何知道您实际读取的是完整的文件大小?@YuvalItzchakov startSize最初设置为0,然后随后设置为该迭代的结束大小。endSize在每次迭代中递增100MB,直到最后一次仅下载剩余数据。流具有rect length如果我添加一个断点,并且文件大小是以字节为单位的确切大小,它将无法打开。您确定生成的文件是zip吗?@YuvalItzchakov windows将其识别为zip文件,与7zip相同,但当您打开它时,会出现错误。只有使用zip扩展名保存在中,它才会识别为zip文件你的密码。