相关疑难解决方法(0)

在字符串和ArrayBuffers之间转换

是否有一种普遍接受的技术可以有效地将JavaScript字符串转换为ArrayBuffers,反之亦然?具体来说,我希望能够将ArrayBuffer的内容写入localStorage并将其读回.

javascript serialization typed-arrays arraybuffer

231
推荐指数
16
解决办法
30万
查看次数

如何从Blob转到ArrayBuffer

我正在研究Blob,我注意到当你有一个ArrayBuffer时,你可以很容易地将它转换为Blob,如下所示:

var dataView = new DataView(arrayBuffer);
var blob = new Blob([dataView], { type: mimeString });
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,是否可以从Blob转到ArrayBuffer?

javascript blob arraybuffer

100
推荐指数
7
解决办法
11万
查看次数

从JavaScript二进制字符串创建Blob或文件会更改字节数?

我一直在玩一些JS加密库(CryptoJS,SJCL),并发现了与Blob/File API和JavaScript"二进制字符串"相关的问题.

我意识到加密甚至不是真正相关的,所以这是一个非常简化的场景.只需使用readAsBinaryString读取文件,然后创建一个Blob:

>>> reader.result
"GIF89a????ÿÿÿÿÿÿ!þCreated with GIMP?,???????D?;"
>>> reader.result.length
56
>>> typeof reader.result
"string"
>>> blob = new Blob([reader.result], {type: "image/gif"})
Blob { size=64, type="image/gif", constructor=function(), more...}
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个基本上可以执行上述操作的JSFiddle:它只是读取任意文件,从中创建一个blob,并输出长度与大小:http: //jsfiddle.net/6L82t/1/

看来,当从"二进制(javascript)字符串"创建Blob时,具有字符编码的内容最终会重置结果.

如果使用非二进制文件,您将看到Blob和原始二进制字符串的长度相同.

因此,当尝试从非纯文本Javascript字符串创建Blob /文件时会发生一些事情,我需要任何不会发生的事情.我认为它可能与JS字符串是UTF-16的事实有关?

这里有一个(可能)相关的线程: HTML5文件API读作文本和二进制

在将它们放入Blob/File之前,我是否需要获取解密结果(UTF-16)并将它们"转换"为UTF-8?

与Freenode上的#html5中的某个人一起工作,我们确定如果你直接读取一个ArrayBuffer,然后通过首先使用Uint8Array创建blob,那么字节就可以正常工作了.您可以在这里看到一个基本上可以做到的小提琴:http: //jsfiddle.net/GH7pS/4/

问题是,至少在我的场景中,我将最终得到一个二进制字符串,并想弄清楚如何将其直接转换为Blob,以便我可以使用html5的下载允许用户点击下载blob直接.

谢谢!

javascript html5

15
推荐指数
1
解决办法
2万
查看次数

javascript readAsArrayBuffer返回空数组缓冲区

我试图使用FileReader readAsArrayBuffer属性读取本地文件.读取成功,在"onload"回调中,我在reader.result中看到了Array Buffer对象.但是Array Buffer只是空的.设置长度,但不设置数据.我如何获得这些数据?

这是我的代码

<!DOCTYPE html>
<html>

<body>
    <input type="file" id="file" />
</body>

<script>
    function handleFileSelect(evt) {

        var files = evt.target.files; // FileList object

        var selFile = files[0];
        var reader = new FileReader();
        reader.onload = function(e) {
            console.log(e.target.result);
        };

        reader.onerror = function(e) {
            console.log(e);
        };
        reader.readAsArrayBuffer(selFile);
    }


    document.getElementById('file').addEventListener('change', handleFileSelect, false);
</script>

</html>
Run Code Online (Sandbox Code Playgroud)

reader.result的控制台输出

e.target.result
ArrayBuffer {}
e.target.result.byteLength
25312
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何获取这些数据?有一些安全问题吗?没有错误,不执行onerror.

来自评论:你能告诉我如何访问缓冲区内容吗?我实际上正在尝试播放音频文件AudioContext...为此我需要缓冲数据...

javascript arraybuffer audiocontext

9
推荐指数
2
解决办法
2万
查看次数