当前位置: 首页 > 知识库问答 >
问题:

从内存流中提取(字符串)文件内容

杜河
2023-03-14

我有一个位于Azure Data Lake Store上的文件,我正在编写一个apiendpoint以将该文件的内容作为字符串检索。我遇到的问题是,当我尝试读取流时,我得到一个空字符串。这是我正在使用的:

[HttpGet("api/rundata/solutions/{solutionId}/dates/{dateId}/files/{fileId}")]
public async Task<IActionResult> GetFile(string solutionId, string dateId, string fileId, string account, string key, string mode="data")
{
    var dataLakeFileSystemClient = _dataLakeTools.GetDataLakeFileSystemClient(account, key, "rundata");
    var downloadResponse = await _dataLakeTools.DownloadFileAsync(dataLakeFileSystemClient, $"{solutionId}/{dateId}", fileId);

    //returns the file itself
    if (mode.Equals("file"))
    { 
        using (var memoryStream = new MemoryStream())
        {
            downloadResponse.Value.Content.CopyTo(memoryStream);
            var fileBytes = memoryStream.ToArray();
            memoryStream.Close();
            return File(fileBytes, "application/octet-stream");
        }
    } 

    //returns the contents of the file as a string
    else if (mode.Equals("data"))
    {
        using (var memoryStream = new MemoryStream())
        {
            downloadResponse.Value.Content.CopyTo(memoryStream);
            using(var streamReader = new StreamReader(memoryStream))
            {
                string contents = streamReader.ReadToEnd();
                return Ok(contents);
            }
        }
    }
    return BadRequest();
}

目前,返回文件的响应工作正常,我可以在PC上打开文件并读取其内容。使用StreamReader返回文件内容的响应返回空字符串。

共有1个答案

经慈
2023-03-14

我怀疑memoryStream位置设置为CopyTo。您可以使用查找重置内存流

将当前流中的位置设置为指定值。

downloadResponse.Value.Content.CopyTo(memoryStream);
memoryStream.Seek(0,SeekOrigin.Begin);

或者传递<code>downloadResponse.Value。内容进入StreamReaderconstructor,我假设它只是一个NetworkStream

using(var streamReader = new StreamReader(downloadResponse.Value.Content))
 类似资料:
  • 我有以下字符串 从上面,我需要提取下面的文字 第一个数字和文本之间总是有一个空格,所以2129和This is page1之间有一个空格。有时第一个数字被省略,就像2129不见了。文本和下一个数字之间总是有一个空格,所以在This is a Page1和6754001之间有一个空格,有时可能有两个空格。我只需要提取这些线这些线总是从空格开始,所以它可以 它们的后面总是有一个空格,有时是一个空格,有

  • 所谓字符串,指的就是字符的序列或者“串”。我们要在字符串上执行的第一个操作是提取所有字符中的一个。C++使用方括号([和])执行该操作: apstring fruit = "banana"; char letter = fruit[1]; cout << letter << endl; 表达式fruit[1]表明我们要从字符串变量fruit中取得编号为1的字符,并将结果保存在字符变量letter

  • 问题内容: 我要执行以下操作。 我想要所有超链接的行为进行ajax调用并检索html。 不幸的是,您不能简单地用ajax响应中收到的html替换当前的html。 如何仅获取ajax响应的标记中的内容,以便 仅 替换现有html中正文的内容。 编辑:开始标记并不总是这样,有时可能会有一个类,例如 问题答案: 如果我对您的理解正确,请使用正则表达式在body标签之间获取内容。 编辑 根据您在下面的评论

  • 问题内容: 我想从包含数字和字母的字符串中提取数字: 我想在这里获取号码或任何其他号码。 问题答案:

  • 问题内容: 我已经在下面使用过一段时间了。至少在我访问过的网站上,它似乎是分布最广的。 在Java中,是否有更好/不同的方式将文件读取为字符串? 问题答案: 读取文件中的所有文本 Java 11添加了方法来读取小文件,以String保留行终止符: 对于介于Java 7和11之间的版本,这是一个紧凑而健壮的习惯用法,它包装在实用程序方法中: 从文件中读取文本行 Java 7添加了一种便捷方法,可以将

  • 问题内容: 我正在尝试找到一种可靠的解决方案,以从字符串中提取URL。我有一个站点,用户可以在其中回答问题,并且可以在源框中输入他们的信息源,并允许他们输入网址。我想提取该URL并使其成为超链接。类似于Yahoo Answers的操作方式。 有谁知道可以做到这一点的可靠解决方案? 我发现的所有解决方案都适用于某些URL,但不适用于其他URL。 谢谢 问题答案: 约翰·格鲁伯(John Gruber