[Seaside] Re: Magritte + Comet problem?
John Chludzinski
john.chludzinski at gmail.com
Wed Jun 3 22:33:49 UTC 2009
The problem occurred when I tried to use MAFileDescription from
Magritte. When I tried to 'upload' a file I had selected, I got an
error in my Opera browser. After some investigation I found that the
'fields' instance variable in WARequest was an empty Dictionary.
Hence, the changes in the class WAListener. ---John
On Wed, Jun 3, 2009 at 3:18 PM, John Chludzinski
<john.chludzinski at gmail.com> wrote:
> To use Comet I use:
>
> WAListener startOn: 8080.
>
> But it appears that Magritte doesn't work with WAListener. To get it
> to work Bob Arning & I made mods to WAListener (let me know anyone if
> this is problematic?):
>
> !WAListener methodsFor: 'private' stamp: 'raa 6/3/2009 14:42'!
> convertFileName: aString
> ^aString! !
>
> !WAListener methodsFor: 'private' stamp: 'raa 6/3/2009 14:42'!
> convertRequest: aKomRequest
> | request |
>
> self processMultipartFields: aKomRequest.
>
> request := WARequest
> method: aKomRequest method
> url: aKomRequest url unescapePercents
> headers: aKomRequest header
> fields: (self fieldsOf: aKomRequest)
> cookies: aKomRequest cookies
> nativeRequest: aKomRequest.
>
> aKomRequest method = 'PUT'
> ifTrue: [request fields
> at: 'PUTData'
> put: (aKomRequest stream next: aKomRequest contentLength)].
> ^ request! !
>
> !WAListener methodsFor: 'as yet unclassified' stamp: 'raa 6/3/2009 14:42'!
> convertMultipartFileField: aChunk
>
> ^(WAFile fromChunk: aChunk)
> fileName: (self convertFileName: aChunk fileName);
> contentType: aChunk contentType
> yourself! !
>
> !WAListener methodsFor: 'as yet unclassified' stamp: 'raa 6/3/2009 14:42'!
> processMultipartFields: aRequest
>
> aRequest multipartFormFieldsDo: [ :chunk |
> | contents fieldName previousValue |
> fieldName := chunk fieldName.
> contents := chunk fileName isEmptyOrNil
> ifTrue: [
> String streamContents: [ :stream |
> chunk saveToStream: stream ] ]
> ifFalse: [ self convertMultipartFileField: chunk ].
> previousValue := aRequest postFields at: fieldName ifAbsent: [ nil ].
> previousValue isNil
> ifTrue: [ aRequest postFields at: fieldName put: contents ]
> ifFalse: [
> (previousValue isKindOf: self collectionClass)
> ifTrue: [ previousValue add: contents ]
> ifFalse: [ aRequest postFields at: fieldName put: (self
> collectionClass with: previousValue with: contents) ] ] ]! !
>
More information about the seaside
mailing list