如何使用pure node.js上传文件?

时间:2015-03-21 15:27:36

标签: javascript node.js

我有一个带有表单的网页,表单有文件输入,当我提交表单时,我希望服务器将其写入文件服务器端。

我尝试使用此表单上传多个测试图像,到目前为止,每个测试图像都是包含原始文件文件名的纯文本文件。除了“使用Express!”,“使用This!”,“使用那个!”,“使用其他东西!”之外,我没有找到任何有关如何在线执行此操作的良好信息或示例。而且它非常恶化。

1 个答案:

答案 0 :(得分:4)

我同意Tomalak在评论中所说的话;您尝试单独使用Node解决的问题并不是无关紧要的,并且需要对多种不同的技术有一个非常透彻的理解。

那就是说,我会帮助你开始,希望这对于阅读这样做的模块的源代码来说是一个很好的起点。

只使用Node,这里是一个最小的服务器,它会在任何请求的主体上记录到控制台(我建议发送一个大文件,或二进制文件...开始带文本文件):

var http = require('http');

var server = http.createServer(function(req, res) {
    if(req.url === '/favicon.ico') return res.statusCode = 404, res.end();
    console.log(req.method + ' ' + req.url);
    var data = '';
    req.on('data', function(chunk) {
        data += chunk;
    });
    req.on('end', function() {
        console.log(data);
    });
    res.end('done');
});

server.listen(3000, function() {
    console.log('listening on 3000');
});

然后您可以创建一个HTML表单来连接它:

<!doctype html>
<html>
<head>
</head>
<body>
    <form action="http://localhost:3000" method="POST" enctype="multipart/form-data">
        <input type="file" name="f">
        <input type="submit">
    </form>
</body>
</html>

解析multipart/form-data并非易事,但您可以从这里阅读文档开始:

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4

如果你想看一个人的multipart/form-data解析器的实现,这个非常可靠:

https://www.npmjs.com/package/dicer