标签: arraybuffer

检查ArrayBufferView的实例?

背景

通过一些研究我发现,虽然ArrayBufferView最初没有公开(通过[NoInterfaceObject]),但由于我描述的用例,似乎应该有广泛的一致意见.

最初的协议是ArrayBufferViewDOMWindow命名空间上公开构造函数,该命名空间在Safari(并且仍然在6.1.1中)和Chrome中实现,但随后从Chrome提取,转而使用静态方法ArrayBuffer.isView().

与此同时,Mozilla(仍在)谈论实施 ArrayBuffer.isView().

简单来说:

  • Safari公开了ArrayBufferView构造函数

  • Chrome有 ArrayBuffer.isView()

  • Firefox什么都没有

  • IE - 我还没有接近......

所以,我的问题.检查对象是否是ArrayBufferView实例的最简洁方法是什么?

javascript instanceof typedarray arraybuffer

9
推荐指数
1
解决办法
4689
查看次数

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万
查看次数

数组和ArrayBuffer有什么区别?

我只是想知道为什么每个人都使用ArrayBuffer而不仅仅是正常的array,string或者用字符串化JSON来从服务器向客户端发送消息.它效率更高吗?

另外,只是想知道Uint8Array它是什么,它是如何不同,在哪里使用两个等.

我目前正在使用带有Socket.io的Node.js,但WebSocket如果它是一种更好的方法,我很乐意改为纯s.

javascript websocket node.js socket.io arraybuffer

9
推荐指数
1
解决办法
3124
查看次数

Javascript - 从ArrayBuffer中获取数据?

我有一个使用的拖放脚本readAsArrayBuffer().缓冲区的长度是完美的,但我似乎无法弄清楚如何从缓冲区中提取数据.

显然我必须制作一个DataViewUint8Array或其他东西,然后迭代它的byteLength...帮助!

编辑 相关代码(不是很多):

var reader = new FileReader();
reader.onload = function(e) {
    // do something with e.target.result, which is an ArrayBuffer
} 
reader.readAsArrayBuffer(someFileHandle);
Run Code Online (Sandbox Code Playgroud)

javascript drag-and-drop arraybuffer

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

如何解密ArrayBuffer?

我一直在尝试使用CryptoJS解密ArrayBuffer对象,但到目前为止它总是返回一个空白的WordArray.文件(图像)在iOS和Android应用程序中加密,发送到服务器,并在此Web应用程序中下载以进行解密和显示.iOS和Android应用程序能够毫无问题地解密文件,因此加密过程没有任何问题.

XMLHttpRequest使用responseType设置为的方式下载文件arraybuffer.到目前为止,这是我的代码:

// Decrypt a Base64 encrypted string (this works perfectly)
String.prototype.aesDecrypt = function(key) {

    var nkey = CryptoJS.enc.Hex.parse(key.sha256());
    return CryptoJS.AES.decrypt(this.toString(), nkey, {
        iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);

}

// Decrypt a plain encrypted ArrayBuffer (this is the problem, it always outputs an empty WordArray)
ArrayBuffer.prototype.aesDecrypt = function(key) {

    // Get key
    if (!key) return null;
    var nkey = CryptoJS.enc.Hex.parse(key.sha256());

    // Get input (if I pass the ArrayBuffer directly to the create function, …
Run Code Online (Sandbox Code Playgroud)

javascript encryption arraybuffer cryptojs

8
推荐指数
1
解决办法
6336
查看次数

使用zip.js通过Node.js上的xmlhttp/ajax调用来读取zip文件

我在尝试着 :

  1. 通过xmlhttp将zip文件发送到客户端
  2. 然后使用zip.js读取文件并呈现其内容

我成功收到文件的二进制文件,即成功回调被调用,但是当我尝试执行getEntries时,我得到并出错.我认为错误是发送流的方式,请帮忙.

错误消息:

读取zip文件时出错

我的客户端代码(使用角度):

$http.get(window.location.origin + '/book/'+bookName,{responseType:"Blob"}).
success(function (data , error) {
    var a = new Uint8Array(data);
        //var dataView = new DataView(data);
        //var blob = new Blob(dataView.buffer);
    zip.useWebWorkers = true;
    zip.workerScriptsPath = '/js/app/';

    zip.createReader(new zip.BlobReader(data), function(reader) {

      // get all entries from the zip
      reader.getEntries(function(entries) {   //HERE I GET THE ERROR
        if (entries.length) {

          // get first entry content as text
          entries[0].getData(new zip.TextWriter(), function(text) {
            // text contains the entry data …
Run Code Online (Sandbox Code Playgroud)

javascript download node.js arraybuffer zip.js

8
推荐指数
1
解决办法
1584
查看次数

将arraybuffer转换为字符串:超出最大调用堆栈大小

这是我的代码行.

        var xhr = new XMLHttpRequest();
        xhr.open('GET',window.location.href, true);
        xhr.responseType = "arraybuffer";
        xhr.onload = function(event) {
         debugger;
         console.log(" coverting array buffer to string "); 
         alert(String.fromCharCode.apply(null, new Uint8Array(this.response)));
        };
        xhr.send();
Run Code Online (Sandbox Code Playgroud)

该请求正在制作一个大约3 MB的pdf网址.阅读几个相同错误的线程,告诉必须有一些递归调用,但我没有看到任何递归调用.有帮助吗?

javascript jquery encoding data-conversion arraybuffer

8
推荐指数
3
解决办法
7261
查看次数

Vue / HTML / JS如何使用下载标签将文件下载到浏览器

这个问题与提供的其他答案不同,因为我的问题集中在VUE上,并且VUE是否也有防止默认方法的方法。

这个问题更特定于HTML 5“下载”以及:href的VUE绑定,以及为什么它不能阻止默认浏览器在新选项卡中打开文件的行为。

预期的行为:将文件下载到浏览器

实际行为:在新选项卡中打开文件

例外:在新选项卡中仅打开图像,pdf和浏览器兼容的文件,其他文件(如.exe)正常下载-为什么这样做,可以在html中更改此行为吗?

添加target =“ _ blank”不能解决问题

<a :href="downloadById(item.url)" download>Download</a>
Run Code Online (Sandbox Code Playgroud)

单击上面的链接后,将在新的浏览器选项卡中打开文件,我需要防止这种默认行为,并在单击后强制下载。HTML 5标记“下载”被认为可以解决此问题,但似乎不起作用。

Chrome最近不推荐使用跨域下载的下载标签表单。vue是否有修饰符来防止此默认设置?还有其他方法可以使用javascript或html下载文件吗?

一个建议的解决方案是将URL读取为arrayBuffer,然后在DOM中创建一个新的blob,然后创建一个anchor元素,然后单击它。。但这似乎很难强制下载文件。

我确信他们一定是一个更干净的解决方案,可以从URL下载文件,这是一个小问题,希望有一个简单的解决方案。

谢谢。

html5 arraybuffer vue.js

8
推荐指数
2
解决办法
8693
查看次数

可能的二进制数据的部分XHR响应读数?

我目前正在研究用二进制数据读取部分XHR响应的可能性.我们当前的方法基于'responseText'属性和base64编码.显然,这远非最佳.

我们如何使用XHR读取部分Blob/ArrayBuffer响应?当我在Chrome中尝试时,整个ArrayBuffer/Blob在readyState = 4时可用,但在此之前不可用.

总而言之,在我看来:

  • 读取XHR的responseText属性:可以在readyState = 4之前读取响应,并且我们可以将base64编码的二进制数据流回客户端
  • 使用responseType ='arraybuffer'读取XHR的响应属性:没有部分响应读取,但是当readyState = 4时整个缓冲区可用

我在这里错过了什么吗?我们可以采取什么方法来阅读部分二元响应?

javascript binary xmlhttprequest stream arraybuffer

7
推荐指数
2
解决办法
3095
查看次数

如何获取数组缓冲区对象的 mime 类型?

我正在开发一个 API,它以arraybuffer类型的形式获取文件数据。我的主要问题是知道文件的 mime 类型是什么,因为arraybuffer我需要将其转换为BLOB查看文件。

var file1 = new Blob([response], { type: file.type });
var fileURL = URL.createObjectURL(file1);
Run Code Online (Sandbox Code Playgroud)

在上面的代码片段中,response是 an arraybuffer,我得到的 mime 类型是在上传时将其存储在变量中。但现在的情况是我手里没有任何哑剧类型,所以我需要一种方法来获取它。

这是我的响应标头: 标头

这是我的响应正文示例: 身体

有人能给我建议吗?

javascript blob file-upload arraybuffer angular

7
推荐指数
1
解决办法
8398
查看次数