Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-通过websocket[guacamole]将ArrayBuffer数据发送到后端_Javascript_Websocket_Guacamole - Fatal编程技术网

JavaScript-通过websocket[guacamole]将ArrayBuffer数据发送到后端

JavaScript-通过websocket[guacamole]将ArrayBuffer数据发送到后端,javascript,websocket,guacamole,Javascript,Websocket,Guacamole,我需要使用guacamole公共js库通过websocket将数据(文件)发送到我的guacamole后端 情况如下: function drop(ev){ ev.preventDefault(); if (ev.dataTransfer.items) { for (var i = 0; i < ev.dataTransfer.items.length; i++) { if (ev.dataTransfer.items[i].kind ===

我需要使用guacamole公共js库通过websocket将数据(文件)发送到我的guacamole后端

情况如下:

function drop(ev){
    ev.preventDefault();
    if (ev.dataTransfer.items) {
        for (var i = 0; i < ev.dataTransfer.items.length; i++) {
        if (ev.dataTransfer.items[i].kind === 'file') {
            var file = ev.dataTransfer.items[i].getAsFile();
            var reader = new FileReader();
            reader.onloadend = function fileContentsLoaded (e){
                const stream = guac.createFileStream(file.type, file.name);
                var bufferWriter = new Guacamole.ArrayBufferWriter(stream)
                bufferWriter.sendData(reader.result)
                bufferWriter.sendEnd()
            };
            reader.readAsArrayBuffer(file);
        }
    }
    } else {
        for (var i = 0; i < ev.dataTransfer.files.length; i++) {
        console.log(ev.dataTransfer.files[i].name);
        }
    }
}
  • 将创建拖放区域
  • 用户在该区域放置一个文件
  • 文件被读取
  • 将创建一个guac文件流,并将该文件发送到guac后端
  • 步骤1到3已经开始工作,但我不知道如何将文件发送到鳄梨酱后端

    当文件被删除时,这就是我的函数:(guac是一个全局变量,初始化了Guacamole客户端函数)

    功能下降(ev){
    ev.preventDefault();
    if(ev.dataTransfer.items){
    对于(变量i=0;i
    后端也接收数据,我可以在远程服务器上打开文件,该文件由guacd发送到远程服务器,但该文件只包含某种二进制数据


    有人已经管理好了吗?或者知道我如何发送数据吗?

    如果您在后端使用Node.js,请尝试使用
    Buffer.toString
    Buffer处理它。从
    我已经找到了一个解决方案

    鳄梨酱公共js库已经提供了一个将缓冲区发送到后端的函数

    我的“drop”函数现在看起来如下所示:

    function drop(ev){
        ev.preventDefault();
        if (ev.dataTransfer.items) {
            for (var i = 0; i < ev.dataTransfer.items.length; i++) {
            if (ev.dataTransfer.items[i].kind === 'file') {
                var file = ev.dataTransfer.items[i].getAsFile();
                var reader = new FileReader();
                reader.onloadend = function fileContentsLoaded (e){
                    const stream = guac.createFileStream(file.type, file.name);
                    var bufferWriter = new Guacamole.ArrayBufferWriter(stream)
                    bufferWriter.sendData(reader.result)
                    bufferWriter.sendEnd()
                };
                reader.readAsArrayBuffer(file);
            }
        }
        } else {
            for (var i = 0; i < ev.dataTransfer.files.length; i++) {
            console.log(ev.dataTransfer.files[i].name);
            }
        }
    }
    
    功能下降(ev){
    ev.preventDefault();
    if(ev.dataTransfer.items){
    对于(变量i=0;i
    是的,我正在后端使用节点。我正在使用GuacamoleLite库,它通常会自动处理流量,并将所有内容转发给guacd代理,所以我不知道在库中的何处进行更改。。。