【问题标题】:Find the size of a multipart/form-data file in mule4在 mule4 中查找 multipart/form-data 文件的大小
【发布时间】:2021-07-10 20:11:08
【问题描述】:

我有一个 HTTP 侦听器,它将以 multipart/form-data 格式读取文件。我想查找该文件的大小并检查它是否小于/大于 10 MB。请帮我解决这个问题

【问题讨论】:

  • 在 Mule 中,当您获得已阅读完整文件的大小时。所以,如果有人发送一个无限文件,它会让你的系统崩溃。获取文件大小是否仍然有意义,或者您需要更好的解决方案?
  • 如果文件大小大于 10MB,则要求引发异常。在这种情况下我该怎么办?
  • 是否要检查文件大小以防止由于某些内存不足异常而导致系统崩溃?或者您对此并不担心,只是想检查一下,因为您不想接受 >10 MB 的文件。
  • @HarshankBansal 是的,我只想检查一下,因为我不想接受 > 10MB

标签: mule dataweave mulesoft mule4


【解决方案1】:

您可以使用以下内容:

%dw 2.0
output application/java
---
sizeOf(payload.parts.file.content.^raw)

file 是发送内容的关键。

【讨论】:

  • 您必须注意,正如@Jorge Garcia 所说,附件将完全读入内存,并且可能会消耗更多内存来处理它,因此请注意不要耗尽内存。
  • IIRC,sizeOf 将读入 16Kb 的块以计算文件的大小,即如果文件是二进制文件(并且不会将其完全加载到内存中)......我已经实现了一个解决方案Mule3(可能是 5-6 年前)通过自定义策略来解决这个问题,并且会倒带流(在小块消费后),如果它不超过它会全部通过的大小,但如果它超过size 它将返回 HTTP 500。块的数量/大小是自定义策略的配置。
  • 我的意思是,对于 Mule 4,HTTP 连接器在 DataWeave 开始执行之前读取内存中的附件,而不是流式传输它们。
  • HTTP 侦听器会流式传输支持格式的内容(如 multipart/form-data),并且在您开始使用它之前不会将其加载到内存中。
  • 正如@SalimKhan 提到的,如果有效负载允许流式传输,sizeOf 不会将整个内容加载到内存中。我只想在此声明中添加原因,默认情况下,HTTP 侦听器的流式传输策略是repeatable-file-store-stream。如果将其设置为repeatable-in-memory-stream,则必须将内容加载到内存中。 HTTP 侦听器参考:docs.mulesoft.com/http-connector/1.5/…
猜你喜欢
  • 2014-01-18
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多