我想获取文件并将其作为流传递,但我不确定如何执行此操作。我确实有文件所在的路径。因此,基本上,使用此路径,我将检索此文件并将其保存为流。但如果我错了,请纠正我,但假设“阅读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>
这是我的项目
2条答案
按热度按时间gpnt7bae1#
您可以尝试类似下面的代码,保存打开它然后使用
FileStream
转换为内存流的麻烦。dgsult0t2#
在.Net Framework 4+中,您只需将
FileStream
复制到MemoryStream
即可