[Seaside] large files / 2 - WAFile

Michal miso.list at auf.net
Thu Apr 1 07:59:32 CEST 2004


While uploading large files with Seaside's #fileUploadWithCallback:
the image grows in surprising proportions. Uploading a single 3.4MB
pdf file resulted in an image jumping from 40MB to 85MB, for instance.

Calling #clearAllHandlers reclaims the space, and it looks like it all
comes down to a single instance of WAFile which holds onto the string
of the pdf file. I'm inclining towards the following approach to deal
with the issue of multiple people uploading large files. In WAFile
(pseudocode):

contents: aStream
	aStream size > threshold
		ifTrue: [create-temp-file, nextPutAll: aStream, close it]
		ifFalse: [contents := aStream]

contents
	^ contents ifNil: [read contentsOfEntireTempFile]

contentsIsOnDisk
	^ contents isNil

This would not only avoid keeping 40MB in memory, but would also allow
the client seaside component to get the file to its final disk
destination by simply moving it there without ever bringing it back to
memory, along the lines of:

...
aWAFile contentsIsOnDisk 
	ifTrue: [move-it-to-where-i-want-it]
	ifFalse: [create-file, nextPutAll:, clost it]
...


Comments? Does that sound like a reasonable modification to Seaside's
(large) file handling?

Michal


More information about the Seaside mailing list