【问题标题】:Convert byte[] to file stream without writing to disk将 byte[] 转换为文件流而不写入磁盘
【发布时间】:2016-12-20 14:07:37
【问题描述】:

我们从网络服务获取输入为byte[](我们在内部处理),我们需要上传到另一个只接受文件流的网络服务。

如何在 C# 中将byte[] 转换为文件流无需写入磁盘


编辑:这不是重复的。我不是在问如何将byte[] 转换为内存流或文件流。我在问如何将byte[] 转换为文件流而不写入磁盘。请注意,我需要将数据作为文件流发送到我无权访问的第三方 Web 服务。此网络服务仅接受文件流。

到目前为止,我有以下代码:

string fileWritePath = "c:\\temp\\test.docx";
//here fileContent is a byte[]
File.WriteAllBytes(fileWritePath, fileContent);
FileStream fileStream = new FileStream(fileWritePath, FileMode.Open, FileAccess.Read);

我不想将文件写入本地磁盘并创建文件流。

【问题讨论】:

  • 创建 MemoryStream 并将 byte[] 数组“存储”到其中。
  • 一个外部 web 服务接受 file 流?这似乎是不可能的。文件流位于您的光盘上,并且可以通过网络访问 Web 服务。这是完全不同的两件事。
  • 我同意@Sefe。粗略地说,FileStream 是资源句柄(通常是磁盘上的文件)的包装。此句柄仅在您创建 FileStream 的计算机上具有本地含义。当您将此对象传递给外部 Web 服务器时,底层句柄将没有任何意义。
  • @css 除了 FileStream 之外的 Web 服务如何?您如何访问此服务?

标签: c# arrays filestream


【解决方案1】:

使用MemoryStream:

using(var stream = new MemoryStream(byteArray)){
   SendStreamToService(stream);
}

【讨论】:

    【解决方案2】:

    如果您绑定到文件流,则必须使用它。如果您不想通过物理硬盘驱动器,您可以在系统上安装 ram 磁盘,将部分内存映射到虚拟驱动器,并使用此驱动器将您的 FileStream 映射到.

    【讨论】:

    • 查看我在原帖上方的评论:即使你使用内存盘,我认为当你通过网络传输时 FileStream 无法工作
    • @GianPaolo:也许 OP 网络服务,但意味着别的东西。
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多