简体   繁体   English

将通过WebSockets通过ArrayBuffer发送的文件保存到文件系统时出错

[英]Error when saving file sent trough WebSockets as ArrayBuffer to file system

I have code like this 我有这样的代码

var reader = new FileReader();
reader.onload = function(){
    socket.emit('test', reader.result);
};
reader.readAsArrayBuffer(uploadHandler.files[0]);

it gets file from 它从获取文件

<input type="file" />

and "converts" it to ArrayBuffer, then sends trough WebSockets (Socket.io used) to Node.js server, where i am trying to save it like this 并将其“转换”为ArrayBuffer,然后将低谷WebSockets(用于Socket.io)发送到Node.js服务器,在此我试图像这样保存它

socket.on('test', function(request) {
    require('fs').writeFileSync('../files/test.png', Buffer.from(request));
});

But i get TypeError: this is not a typed array. 但是我得到TypeError:这不是类型化数组。

server > 04-29 12:21:22: <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52   │
00 00 01 1e 00 00 00 66 08 06 00 00 00 1d cf fe ce 00 00 0c 13 69 43 43 50 49 43   │
43 20 50 72 6f 66 69 ... >                                                         │
server > TypeError: this is not a typed array.                                     │
server >     at Function.from (native)                                             │
server >     at Socket.<anonymous> (/home/htdocs/socket/server/server.js:201:65)   │
server >     at emitOne (events.js:77:13)                                          │
server >     at Socket.emit (events.js:169:7)                                      │
server >     at /home/htdocs/socket/server/node_modules/socket.io/lib/socket.js:5  │
03:12                                                                              │
server >     at nextTickCallbackWith0Args (node.js:419:9)                          │
server >     at process._tickDomainCallback (node.js:389:13)

Node.js version is LTS 6.10.2, so as far as i understood i don't need to make Uint8Array from ArrayBuffer, and just can use Buffer.from method, but error still here. Node.js版本是LTS 6.10.2,据我所知,我不需要从ArrayBuffer制作Uint8Array,只可以使用Buffer.from方法,但是错误仍然在这里。

Found out, regardless how you send your file to Socket.io, as ArrayBuffer or File on server side it comes as a Buffer already, so there is no need to call Buffer.from and you can just write 知道了,无论您如何将文件发送到Socket.io,由于ArrayBuffer或服务器端的File都已经作为Buffer出现 ,因此无需调用Buffer.from,您只需编写

socket.on('test', function(buffer) {
    require('fs').writeFileSync('../files/test.png', buffer);
});

And it works :) 它有效:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM