使用上传和POST请求获取文件大小

4
请注意:我想使用纯 Node.js 完成此操作。
我想使用 HTML 标签中的 input type="file" 上传文件,并在同一表单元素中点击提交按钮 input type="submit",然后在提交 POST 请求时获取文件大小(以字节为单位)。
谢谢。

你有尝试过任何东西吗?!!! - dNitro
我不知道如何在纯Node.js中完成这个任务,所以才向像您这样的专业人士提问。 - JohnSnow
有人知道吗?! - JohnSnow
@dNitro 你也不知道怎么写吗? - JohnSnow
1个回答

4

以下类似的内容应该可以正常工作:

var http = require('http');

var server = http.createServer(function(req, res) {
  switch (req.url) {
    case '/':
      display_form(req, res);
      break;
    case '/upload':
      show_bytes(req, res);
      break;
    default:
      res.writeHead(404, {'content-Type': 'text/plain'});
      res.write('not found');
      res.end();
      break;
  }
});
server.listen(3000);

function display_form(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write(
    '<form action="/upload" method="post" enctype="multipart/form-data">'+
    '<input type="file" name="upload">'+
    '<input type="submit" value="Submit">'+
    '</form>'
  );
  res.end();
}

function show_bytes(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write(req.headers['content-length'] +  ' bytes');
  res.end();
}

这个确实可以工作,但是字节大小略有偏差。比实际大小稍微大一点。为什么会这样? - JohnSnow
@dNitro,有什么想法吗? - JohnSnow
1
@JohnNoob,我没有注意到这一点,但似乎每次都会增加大约230字节的开销到实际大小。通常情况下,content-length头应该与传入正文的大小相同。也许是因为chunked编码?!我真的不知道。你可以把它当作一个新问题来考虑,也许有人能帮助我们。 - dNitro
1
它关闭的原因是content-length是整个请求(标题,其他表单字段等)的大小。 我不确定是否有一种方法可以在文件数据被流式传输到服务器之前获取上传文件的大小-您可以按照它们的字节计算每个文件的大小。 像[busboy]这样的工具可以帮助您解决此问题。 (https://www.npmjs.com/package/busboy) - Ryan Wheale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接