-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Saurav,
On 1/2/19 12:20, Saurav Sarkar wrote: > Hi All, > > This is regarding the reading of multi part content in java server > side. > > ServletRequest has an API getParts() API for reading the parts of a > multi part request > https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletReq uest.html#getParts() > > . > > It has part.getInputStream which can be used to read the content of > a specific part. > > Tomcat also provides an implementation for this API. > > But this API parses the multi part content and keeps it in memory. > If the size increase then the content can be offloaded to disk. > > Why does the getPart API or any multi part parsing need to load the > content in memory ? Why can't direct streaming of content happen ? > Loading the content in memory and reading/writing to disk brings > extra cost. This will be specially costly when large files are > getting uploaded. True. You can always limit the part-size or request-size, but you can't stream huge uploads if you want to use getParts(). > Is there no way where at least the file content loading could be > avoided ? Yes, there is a way. Instead of calling HttpServletRequest.getParameter* or HttpServletRequest.getPart*, you can call HttpServletRequest.getInputStream and parse everything yourself. > It may be not be a very specific question for tomcat but more > applicable to any servlet container. Correct, this is applicable to any servlet container. The multipart code in Tomcat parses everything to memory/disk at once because servlet code needs to be able to call HttpServletRequest.getParameter(String) in any order regardless of what how the request data is actually ordered. Also, getParts must return before the calling code can actually do anything with the data. There is no "register a stream handler for a multipart request part called 'foo'" or anything like that. If you want those semantics, you'll have to parse the request yourself. - -chris -----BEGIN PGP SIGNATURE----- Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/ iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAlwtMjkACgkQHPApP6U8 pFgtJA//eRy6nI9gSj10Ok1PYRSYNGJHcblGieiK8aicWqq0xV/RQgMVarq6PK8i OHaBt3e/plA9Z5fr7tNs0jyT6dEhrVONYgkLJmyNxLC/EBtYXFD4M2q2R+YnIZbO GZBjse/O5xzJAK3jJbWVe9w+rJfz6FCp6mPn/0AUNMUVhOgzC5/1oeKvMkyooEHY 598ULLioK0ZvHWHeVJNe/hNdggjwm9jNuDrxuvrNLX6fY44ed/jlfzUh3G0tAw8B Ik1Ug8AJi1EQU0sVPfik5Fos7D740DI0KiRcQWsjvEqvelJhWfNTQkkY9GWUmPzW EMvCJH1T+ehGYo8HD1w+I74SsFlfTRyI/muzzlT5Gy2hCzN56JN4QU+oUQhGfS1E njF0SAmB47XYdMq2fKSaaqmi+zfsvr1AgaPBE/TyfXhCRUYe7K34ThXBpbqon0dd UdphHvka7gyBp/dqrufyhr/EjfnCi6MWUoLSWEIhrMvfeEFsrKshRlql3B+aE9Vk iuwb0p2TT7vu79oCeHr+eANdIurM8vrBx5+PYWJ8AbMqarHeCyvyR0tfgAzokI9w 2rVlg2NuiVN3ByuK9ytDGp94m5BwxdQ1jC8zeJUgCpKesXxzrB4c1IhaY6CRTEFa S3K6IfGtc1zSKGMaN/gz8Mqq5ljm2P8GfkwrzxoDLETjjgVjxKE= =DKX3 -----END PGP SIGNATURE----- --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org