【问题标题】:sending chunks of data from client side从客户端发送数据块
【发布时间】:2018-10-28 11:37:56
【问题描述】:

我正在使用套接字发送文件。在服务器端,我正在收听来自客户端的流,但是从客户端,我无法以可以发送到服务器端的块的形式发送数据。 我使用 FileReader 分片读取文件,您能告诉我我做错了什么吗?

客户代码

<!DOCTYPE html>
<html>

<head>
    <meta charset=utf-8 />
    <title>Echo server</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
    <h1>File Upload</h1>
    <form id="form" id="chat_form">
        <input type="file" id="file_input" />
        <input type="button" onclick="submit1()" value="submit">
    </form>
    <script src="socket.io/socket.io.js"></script>
    <script type="text/javascript">
        var socket = io('localhost:8080');
        var fReader;
        socket.on('echo', function (data) {
            console.log(data);
        });
        socket.emit('echo', 'this is a message');
        function submit1() {
            var file = $("#file_input")[0].files[0];
            var reader = new FileReader();
            reader.onload = function (evnt) {
                socket.emit('join', { 'Name': Name, Data: evnt.target.result });
            }
            reader.readAsArrayBuffer(file);
        }
    </script>
</body>
</head>

服务器代码

var http = require('http')
var fs = require('fs');
var express = require('express')
var socketio = require('socket.io')
var app = express(server)
var server = http.Server(app)
var io = socketio(server)

app.get('/', function(req, res){
  res.sendFile(__dirname + '/client.html')
});

io.on('connection', function(socket){
  var writeStream  = fs.createWriteStream(__dirname +'/m.png');
  socket.on('echo', function(data){
    socket.emit('echo', data);
  });
  socket.on('join', function(chunk){
    console.log(chunk, "==============chunk=====================");
    writeStream.write(chunk);
  })
});

【问题讨论】:

    标签: javascript node.js sockets websocket


    【解决方案1】:

    您永远不会将 file 对象提供给您的 FileReader 对象。事实上,你永远不会对它做任何事情,所以FileReader 对象永远不会有任何事情要做。例如,您可能想要这样做:

    reader.readAsArrayBuffer(file);
    

    您似乎也没有正确地从阅读器对象中获取数据。这里有一个代码示例:File upload with socket.ioSend Images through Websockets

    【讨论】:

    • 我这样做了,但我仍然无法发送大文件和浏览器崩溃,但我能够正确发送小文件@jfriend00
    • @aryankanwar - 然后按照我链接的示例并以可管理的块发送文件。文件有多大?或者使用为任何大小构建的 HTTP 上传发送它。
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2016-01-09
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多