正确配置以增加 Umbraco 处理内存

Correct configuration to increase Umbraco Processing Memory

我在处理 1.6GB 等大文件时不断收到 SystemOutOfMemoryException。我只是想知道我在 web.config 中的配置是否正确。下面是我修改的代码行,以支持大小超过 1GB 的大文件

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

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

我不确定这是否正确。我还通过工具-> 选项-> 项目和解决方案-> Web 项目->“使用 IIS 的 65 位版本”

将 IIS 服务器更改为 x64 中的 运行

我不确定我遗漏了什么,但即使我已经增加了内存大小,我仍不断收到系统内存不足异常

更新: 我正在处理大型文件,如 .mp4 文件或任何类型的文件,无论类型如何,只要客户需要它。

此外,我没有使用前端上传文件。我们所做的是通过 Filezilla 上传大文件,如果文件上传到服务器,我们使用 Umbraco MediaService 处理该文件以在媒体页面中有一个条目。我们还使用 Hangfire 触发我们的后台服务来处理 MediaService

接受这样的大文件不是最佳做法。例如,这提供了执行 Ddos 攻击的可能性。此外,您将需要大量内存,因为文件将在内存中处理,然后再将其保存到磁盘,因此内存存在问题。

更好的解决方案是将它们与 javascript 分块并发送小数据包,然后在服务器端将它们拼接在一起。关于如何自己构建这个有一个很好的解释:https://www.dotnetcurry.com/aspnet-mvc/893/upload-big-files-aspnet-mvc-azure-storage (根据您处理会话的方式,将其添加到会话中可能无法解决您的内存问题。我想您需要将其保存到磁盘)

与 memroy 异常无关,但请确保将其包装在 <location path="xxx/yyy"> your web.config stuff </location> 中,以便只有此 URL 可以接受大文件。

通过在我的 Umbraco MediaService 中添加第二个和第三个参数设法解决了这个问题。最初我使用 Service.MediaService.Save(iMediaFile) 但似乎在使用大文件时它需要知道是谁上传了文件因此它需要第二个参数 user_id 我添加了第三个参数来抑制任何错误消息.当我遇到内存不足异常时,实际上错误是我没有在第二个参数中传递 user_id 。因此我的新代码变成了 Service.MediaService.Save(iMediaFile, user_id, false)

同样,解决方案并不是真正的配置,因为我的配置足以处理文件。错误是由于缺少第二个参数