[squeak-dev] Streaming directly from WebResponse content to
SketchMorph
Bob Arning
arning315 at comcast.net
Thu Oct 18 02:06:45 UTC 2012
The problem with this approach is that the contentStream is a
SocketStream which has some issues:
- does not undersatnd #reset. This is used after matching the first
bytes to ensure starting at the beginning when building the image.
- has wobbly #atEnd. The png reader keeps getting data until the end of
the stream, but the SocketStream won't answer true to #atEnd until the
socket is closed.
The following will work, but I'm not certain if WebClient might give you
the response before all needed data has arrived, in which case it will
not work. ;-)
| url resp ucode passw myData myStream |
Transcript clear.
url := 'http://127.0.0.1/~bob/images/addInitialAction_button.png'.
ucode := 'xxx'.
passw := 'yyy'.
resp := (WebClient) new
acceptCookies: true;
username: ucode;
password: passw;
httpGet: url.
resp contentStream binary.
myData _ resp contentStream nextAllInBuffer.
myStream _ ReadStream on: myData.
(PNGReadWriter on: myStream) nextImage asMorph openInHand
Cheers,
Bob
On 10/17/12 8:38 PM, Casimiro de Almeida Barreto wrote:
> On 17-10-2012 20:42, Bert Freudenberg wrote:
>> (PNGReadWriter formFromStream: (HTTPClient httpGet: 'http://squeak.org/img/squeaklogosmallerpng')) asMorph openInHand
> Not so easy... site requires authentication (hence the idea of using
> WebClient...)
>
> | wc url resp ucode passw sm |
>
> Transcript clear.
>
> url := 'http://127.0.0.1:8088/(... lots of path elements ...)/image.png'.
>
> ucode := 'xxx'.
> passw := 'yyy'.
>
>
> resp := (WebClient) new
> acceptCookies: true;
> username: ucode;
> password: passw;
> httpGet: url.
>
> resp contentStream binary.
>
> (PNGReadWriter formFromStream: resp contentStream) asMorph openInHand
>
> It fails with "Image format not recognized.
>
> What happens is that in the test there's something like:
>
> understandsImageFormat
>
> #(137 80 78 71 13 10 26 10) do: [ :byte |
> stream next = byte ifFalse: [^ false]].
> ^ true
>
> and while byte is Character stream returns SmallInteger. So, yeah, first
> element of list is 137 and first byte of stream is 137 but comparsion
> fails. If forced (byte asInteger) it will fail later on decoding.
>
> Interesting enough is that when it reads from a file stream it works
> (provided content binary).
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20121017/693e4cfa/attachment.htm
More information about the Squeak-dev
mailing list
|