繁体   English   中英

node.js如何汇编文件上传?

[英]node.js how to assemble file upload?

我在node.js中写图像上传,我从客户端上传了一个文件:

    <form id="frmImgUpload" 
          enctype="multipart/form-data"
          action="/uploads/"
          method="POST">
      <input id="btnFile"
             style="float:right;"
             type="file"/>
      <input id="btnUpload"
             style="float:right;"
             type="button"
             value="Upload"/>
    </form>

执行上传的代码:

    $("#btnUpload").click(function() {  
      $("#btnFile").attr("name", strCompanyKey);                    
      $("#frmImgUpload").submit();
    });

在服务器上,我已经显示了数据(只是一个小片段):

    [ '------WebKitFormBoundaryI206ASCJdnqVyOo0\r\nContent-Disposition: form-data; name="syberdyne"; filename="simonplatten.png"\r\nContent-Type: image/png\r\n\r\n�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000�\u0000\u0000\u0000l\b\u0006\u0000\u0000\u0000Ԃ\b�\u0000\u0000\u0000\tpHYs\u0000\u0000\u000b\u0013\u0000\u0000\u000b\u0013\u0001\u0000��\u0018\u0000\u0000\nOiCCPPhotoshop ICC profile\u0000\u0000xڝSgTS�\u0016=���BK���KoR\u0015\b RB��\u0014�',
    '*!\t\u0010J���\u0015Q�\u0011EE\u0004\u001bȠ�\u0003����\u0015Q,\f�\n�\u0007����������{�kּ������>������\u0007�\b\f�H3Q5�\f�B\u001e\u0011�������.@�\n$p\u0000\u0010\b�d!s�#\u0001\u0000�<<+"�\u0007�\u0000\u0001x�\u000b\b\u0000�M��0\u001c��\u000f�B�\\\u0001��\u0001�t�8K\b�\u0014\u0000@z�B�\u0000@F\u0001���',

我想做的是将这些数据重新组装到原始文件中。 它们是可以帮助我实现这一目标的任何API还是教程?

我已经拆分了从客户端收到的内容:

    var strBody = "";
    request.on("data", function(chunk) {
      strBody += chunk;
    });
    request.on("end", function() {
      console.dir(strBody.split("\r\n"));
    });

结果是:

    [ '------WebKitFormBoundarynBkMCKI8RBvIReTF',
      'Content-Disposition: form-data; name="syberdyne";filename="simonplatten.png"','Content-Type: image/png','','�PNG','\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000�\u0000\u0000\u0000l\b\u0006\u0000\u0000\u0000Ԃ\b�\u0000\u0000\u0000\tpHYs\u0000\u0000\u000b\u0013\u0000\u0000\u000b\u0013\u0001\u0000��\u0018\u0000\u0000\nOiCCPPhotoshop ICC profile\u0000\u0000xڝSgTS�\u0016=���BK���KoR\u0015\b RB��\u0014�&*!\t\u0010J���\u0015Q�\u0011EE\u0004\u001bȠ�\u0003����\u0015Q,\f�\n�\u0007����������{�kּ������>������\u0007�\b\f�H3Q5�\f�B\u001e\u0011�������.@�001\u0000O��y���7\u0000\u0000\u0000\u0000IEND�B`�',
      '------WebKitFormBoundarynBkMCKI8RBvIReTF--',
      '' ]

这只是数据的一部分,看起来二进制数据是以某种方式编码的,是否可以调用例程来对其进行解码?

我已经安装了“ formidable”,该怎么解析?

您可以使用multer包: httpsmulter

Multer将主体对象和一个或多个文件对象添加到请求对象。 主体对象包含表单文本字段的值,文件或文件对象包含通过表单上传的文件。

范例

var express = require('express')
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

var app = express()

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file 
  // req.body will hold the text fields, if there were any 
})

强大的是“用于解析表单数据(尤其是文件上传)的node.js模块”。

根据其文档 ,您可以传入请求,并允许您通过回调函数或事件方便地访问表单数据。

通过可选的回调:

var form = new formidable.IncomingForm();

form.parse(req, function(err, fields, files) {
  // ...
});

并通过事件:

var form = new formidable.IncomingForm();

form.on('error', function(err) {
  // ...
});

form.on('field', function(name, value) {
  // ...
});

form.on('file', function(name, file) {
  // ...
});

form.parse(req);

暂无
暂无

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

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