我正在为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这么长时间......有一天我发誓..
答案 0 :(得分:0)
Blob
构造函数定义为new Blob( array, options )
,其中array
记录为
array
是Array
,ArrayBuffer
,ArrayBufferView
,Blob
个对象的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 );
});
});