.net 获取文件.流使用路径

whlutmcx  于 2023-03-04  发布在  .NET
关注(0)|答案(2)|浏览(164)

我想获取文件并将其作为流传递,但我不确定如何执行此操作。我确实有文件所在的路径。因此,基本上,使用此路径,我将检索此文件并将其保存为流。但如果我错了,请纠正我,但假设“阅读as Stream”是类似于实际打开文件并读取它的操作是否正确?
是否有任何方式只是检索或复制文件到FileStream或MemoryStream?现在我有这个,但不确定这是否正确

foreach (string filePath in filePaths)
 {
      string filename = Path.GetFileName(filePath);
      //Constants.Conventions.MediaTypes.Image
      string mediaType = Constants.Conventions.MediaTypes.File;
      string ext = Path.GetExtension(filename);
      IMedia media = Services.MediaService.CreateMedia(filename, Constants.System.Root, mediaType);
      MemoryStream ms = new MemoryStream();
      using (Stream stream = System.IO.File.OpenRead(filePath))
      {
           ms.WriteTo(stream);
      }
      media.SetValue("umbracoFile", filename, ms);
      // Save the media
      Services.MediaService.Save(media);
      media = null;
      System.IO.File.Delete(filePath);
 }

我不确定这是不是最好的方法。但是主要的目标是从路径中检索该文件并将其保存在media.SetValue("umbracoFile", filename, ms);中,因为它需要Stream作为输入。我如何以最有效的方式完成此操作?由于文件太大,我总是摆脱memoryexception。所以我猜测,因为它将其作为Stream读取,所以它在大文件时抛出错误。所以也许我们可以复制它来保存。我不确定这里是否真的需要帮助
更新:这里是配置,以确保我不会耗尽内存

<httpRuntime requestValidationMode="2.0" enableVersionHeader="false" maxRequestLength="2097151" executionTimeout="50000000" targetFramework="4.5" fcnMode="Single" />

<location path="umbraco">
  <system.web>
    <httpRuntime maxRequestLength="204800" executionTimeout="99999"/>
  </system.web>
</location>

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="2294967295" />
  </requestFiltering>
</security>

这是我的项目

gpnt7bae

gpnt7bae1#

您可以尝试类似下面的代码,保存打开它然后使用FileStream转换为内存流的麻烦。

foreach (string filePath in filePaths)
{
    string filename = Path.GetFileName(filePath);
    string mediaType = Constants.Conventions.MediaTypes.File;
    string ext = Path.GetExtension(filename);
    IMedia media = Services.MediaService.CreateMedia(filename, Constants.System.Root, mediaType);
    using (var fs = new FileStream(filePath, FileMode.Open))
    {
        media.SetValue("umbracoFile", filename, fs);
        Services.MediaService.Save(media);
    }

    media = null;
    System.IO.File.Delete(filePath);
}
dgsult0t

dgsult0t2#

在.Net Framework 4+中,您只需将FileStream复制到MemoryStream即可

MemoryStream ms = new MemoryStream();
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    file.CopyTo(ms);

相关问题