无法正确保存ChromeOS应用中的类型数组

时间:2016-09-19 08:29:35

标签: javascript arrays file blob

我正在为chromeOS创建一个应用程序..问题是,当我尝试保存一个类型化数组时,它变得完全无稽之谈。

例如,这是在HexReader中打开的PNG文件: check it out

现在,我尝试使用以下代码保存相同的图像:

var data = new Uint8Array([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x06, 0x00, 0x00, 0x00, 0x8D, 0x32, 0xCF, 0xBD, 0x00, 0x00, 0x00, 0x13, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0x63, 0x60, 0x60, 0x60, 0xF8, 0x4F, 0x24, 0x1E, 0x55, 0x48, 0x4F, 0x85, 0x00, 0x34, 0xBD, 0x63, 0x9D, 0x45, 0xBF, 0x95, 0x85, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82]);

var blob = new Blob( data, {type:'application/octect-binary'} );

// Allow saving of our file
chrome.fileSystem.chooseEntry( {type:"saveFile"}, function (a)
{
    a.createWriter( function (b)
    {
        b.write( blob );
    });
});

然后猜怎么着?当我在Hex Reader中查看时,我打开它并且它不会作为PNG打开,THIS

所以问题是,什么,如何,何时,为什么? FML lmao ^。^' 一直试图保存png这么长时间......有一天我发誓..

1 个答案:

答案 0 :(得分:0)

Blob构造函数定义为new Blob( array, options ),其中array记录为

  

arrayArrayArrayBufferArrayBufferViewBlob个对象的DOMString个,或者是>任何此类对象的混合,将放在Blob内。

来源:https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob

在您的示例中,您将Uint8Array直接传递给blob,这令人惊讶地没有出错,但它确实将错误的数据放入Blob

试试这个

var data = new Uint8Array([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x06, 0x00, 0x00, 0x00, 0x8D, 0x32, 0xCF, 0xBD, 0x00, 0x00, 0x00, 0x13, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0x63, 0x60, 0x60, 0x60, 0xF8, 0x4F, 0x24, 0x1E, 0x55, 0x48, 0x4F, 0x85, 0x00, 0x34, 0xBD, 0x63, 0x9D, 0x45, 0xBF, 0x95, 0x85, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82]);

var blob = new Blob( [data], {type:'application/octect-binary'} );

// Allow saving of our file
chrome.fileSystem.chooseEntry( {type:"saveFile"}, function (a)
{
    a.createWriter( function (b)
    {
        b.write( blob );
    });
});