Re: using BlobBuilder append method with generated binary data

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.


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 Tuesday, 16 November 2010 15:25:48 UTC