[Seaside] Bad Request ZnEntityTooLarge
Sven Van Caekenberghe
sven at stfx.eu
Thu Jan 19 13:29:08 UTC 2017
Your analysis is correct.
Most Seaside adaptors, including ZnZincServerAdaptor, are implemented so that the incoming (Zn) request is read from the wire, then converted to Seaside WA* objects, processed, the result converted from WA* objects to an outgoing (Zn) response and put on the wire.
Zn has some built-in resource protection measures, including a limit on how large entities (bodies) can be. The error of crossing such a limit is raised in the very first step, outside the scope of your Seaside handling code.
At first sight, I would not immediately know how this can be solved.
Note that in order to know how much is coming in, you have to read it, but you have to stop in time. Note also that the content-length header could be absent or wrong (a malicious request).
I can't remember where we currently stand on a streaming Zn Seaside adaptor, there were some experiments in the past IIRC. That could be a solution, because then the entity/body is not read until further down the line, if we can get it to work. The current one only seems to do streaming for responses.
> On 19 Jan 2017, at 13:32, Bernhard Pieber <bernhard at pieber.com> wrote:
> I have a Seaside application which includes a file upload feature.
> renderContentOn: html
> html fileUpload
> callback: [ :file | self receiveFile: file ].
> html submitButton: 'Upload‘ ]
> In receiveFile: I just save the uploaded file on the file system.
> When I upload a file larger than 16 MB an error page is shown with the error message:
> Bad Request ZnEntityTooLarge
> I found that by using ZnConstants>>maximumEntitySize: I can increase this limit. However, I want to catch this in the image and show an error message to the user.
> I tried wrapping receiveFile: and renderContentOn: with an on:do: exception handler for ZnEntityTooLarge. However, neither works. It seems that the error happens before renderContentOn: is even called. I searched the mailing lists but did not come up with an answer.
> How can I achieve this in Seaside? Any help would be much appreciated.
> seaside mailing list
> seaside at lists.squeakfoundation.org
More information about the seaside