Re: using BlobBuilder append method with generated binary data

My code had a bug in it. The APIs seem to be working ok for my purposes.
Using the APIs, I was able to write Firefox's sendAsBinary method for chrome.
It is available from


On Tue, Nov 16, 2010 at 5:25 PM, Toni Ruottu <> wrote:
> Sorry for slow answer. Took me a while to get on top of this. I think
> they just might answer my problem. However, I can not really tell
> before I see a working implementation. I wrote a test. See
> It does not
> currently work with the latest development version of Chrome. I
> wonder, if I am doing something wrong.
>  --Toni
> On Wed, Oct 20, 2010 at 6:17 PM, Eric Uhrhane <> wrote:
>> Toni:
>>    BlobBuilder now has an append() method that takes an ArrayBuffer,
>> and FileReader has readAsArrayBuffer.  Do these together satisfy your
>> needs?
>>        Eric
>> On Wed, Oct 20, 2010 at 3:39 AM, Toni Ruottu <> wrote:
>>> I have discussed the topic before on some Chromium bug threads. I
>>> searched the archives of this mailing list for blobs and generated
>>> content, but was not too successful. There may be multiple different
>>> reasons why one would need to build blobs from generated data. The one
>>> that concerns me, is being able to do binary POSTs with XmlHTTPRequest
>>> in a standard manner. To send binary data over XHR one is required to
>>> send out a blob, but first the blob needs to be constructed with
>>> BlobBuilder. Let me fill you in on how I see the current situation.
>>> Maybe someone can spot an error in my line of thought.
>>> A new (empty) BlobBuilder is created by stating...
>>> var bb = new BlobBuilder();
>>> After creating a BlobBuilder, the user appends some data into the blob
>>> being generated by using the append function. The append function is
>>> overloaded and can be used to append multiple different types of data
>>> into the blob. Currently only existing blobs, and utf-8 text are
>>> supported.
>>> One can add an existing blob into the new one by doing...
>>> bb.append(existingBlob);
>>> One can add a text string in utf-8 format by doing...
>>> bb.append(aTextString);
>>> Once the data is in there, it is possible to construct the new blob with...
>>> var blob = bb.getBlob()
>>> A blob has a slice method which makes it possible to turn a large blob
>>> into smaller ones. It is thus possible to cut out single bytes from a
>>> blob and use them construct new blobs by appending copies of these
>>> sample bytes together with the BlobBuilder.
>>> As sample bytes can only be generated by writing text into the blob as
>>> utf-8, it is not possible to generate all 8-bit patterns. More
>>> specifically, the bit patterns that are illegal in any given utf-8
>>> string, are not possible to generate using the current API. This leads
>>> developers into using various hacks to overcome the issue.
>>> For example one could ask the user to provide a file with sample
>>> bytes. Methods for reading a file into a blob are available, so there
>>> is no need to generate the sample bytes. There is however no way to
>>> make sure that the user provided a file with correct bit-patterns as
>>> the blob interface is to a large degree a read-only interface. A
>>> demonstration of using a file to overcome the issue is available at
>>> To solve the problem a third append function which accepts a list of
>>> integers, and adds the corresponding bytes into the blob is needed.
>>> Once such method has been introduced it should be possible to write
>>> the 7-bit ascii string "foo" into a BlobBuilder by doing...
>>> bb.append([102,111,111]);
>>> It should also be possible to add bytes 0x00 and 0xff into the
>>> BlobBuilder by doing...
>>> bb.append([0,255]);
>>> Would such append method be a possible addition as I defined it? Is
>>> there some alternative way for achieving the same result. Which
>>> specification should such feature go into?
>>>  thank you for your time, --Toni Ruottu

Received on Thursday, 2 December 2010 16:05:42 UTC