如何使用http模块在node.js中上传文件?

如何使用http模块在node.js中上传文件?,node.js,Node.js,到目前为止,我有这段代码,但无法获取缓冲区二进制 var http = require('http'); var myServer = http.createServer(function(request, response) { var data = ''; request.on('data', function (chunk){ data += chunk; }); request.on('end',function(){

到目前为止,我有这段代码,但无法获取
缓冲区
二进制

var http = require('http');
var myServer = http.createServer(function(request, response)
{
    var data = '';

    request.on('data', function (chunk){
        data += chunk;
    });

    request.on('end',function(){

        if(request.headers['content-type'] == 'image/jpg') {

            var binary = Buffer.concat(data);

            //some file handling would come here if binary would be OK

            response.write(binary.size)
            response.writeHead(201)
            response.end()
        }

但是得到这个错误:
抛出新的TypeError('Usage:Buffer.concat(list,[length])

您正在做三件坏事:

  • 使用缓冲区API错误-因此出现错误消息
  • 将二进制数据连接为字符串
  • 在内存中缓冲数据
  • 穆克什已经处理了#1,所以我将讨论更深层次的问题

    首先,您将接收二进制
    缓冲区
    块,并使用默认(utf8)编码将它们转换为字符串,然后将它们连接起来。这将损坏您的数据。还有一些现有的字节序列是无效的utf8,如果一个有效的序列被一个块切成两半,那么你也会丢失这些数据

    相反,您应该将数据始终保持为二进制数据。维护一个
    Buffer
    数组,将
    push
    每个块放到该数组中,然后在末尾将它们全部连接起来

    这导致了问题3。您将整个上传缓冲到内存中,然后将其写入文件,而不是将其直接流式传输到(临时)文件。这会给应用程序带来很大的负载,既占用了内存,也占用了分配所有内存的时间。您只需将
    请求
    导入文件输出流,然后在磁盘上检查它


    如果您只接受非常小的文件,您可以将其保存在内存中,但您需要保护自己,以免客户端发送太多数据(事实上,还需要谎报他们将发送多少数据)。

    @mukeshharma没有您的文件是不完整的,您可以取消删除它吗?