繁体   English   中英

Node.js无需附加框架即可将文件上传到服务器

[英]Node.js upload files to server without additionals frameworks

我正在写一个简单的上传网站。 我使用XmlHTTPRequest上传文件。 到目前为止,我只经历了这一部分,服务器已经为文件上传做好了准备。 但是,现在我需要制作自己的服务器才能在本地测试此Web应用程序。 我选择了Node.js,因为它使用JavaScript,并且与其他服务器相比看起来非常简单。 但是,我在使用此文件方面还不是很有经验,所以我不知道如何从请求中“捕获”上传的文件并将其保存到PC上的某个文件夹中。 我一直在尝试找到一种解决方案,但是我发现的每个解决方案都在使用某种框架。 如果可能的话,我不想使用它们,因为我不想在服务器代码中增加任何复杂性,因为它不是我项目的重点,并且我真的需要最简单的方法来进行测试。

因此,您能推荐我一些简单的方法来做到这一点吗? 如果您认为没有框架的“清晰” Node.js是不理想的,请随意描述任何其他解决方案,我将尽力理解它:-)


我已经写了服务器的基本部分,可以打印一些语句并加载我的源代码:

var http = require('http');
var fs = require('fs');
var path = require('path');

http.createServer(function(request, response) {
    console.log(request.method + ' ' + request.url);
    var filePath = '.' + request.url;
    if (filePath == './')
        filePath = './index.html';
    if (filePath.indexOf('/../') !== -1) {
        response.writeHead(400);
        response.end();
    } else {
        var extname = path.extname(filePath);
        var contentType = 'text/plain';
        switch (extname) {
            case '.js': contentType = 'text/javascript'; break;
            case '.html': contentType = 'text/html'; break;
            case '.css': contentType = 'text/css'; break;
        }
        fs.exists(filePath, function(exists) {
            if (exists) {
                fs.readFile(filePath, function(error, content) {
                    if (error) {
                        response.writeHead(500);
                        response.end();
                    } else {
                        response.writeHead(200, { 'Content-Type': contentType });
                        response.end(content, 'utf-8');
                    }
                });
            } else {
                response.writeHead(404);
                response.end();
            }
        });
    }
}).listen(8080);

好的,最终我已经通过使用fs可怕的方法解决了这个问题。 Web应用程序与服务器之间的通信是经典的请求响应,在Node.js中很容易处理。

这是完整的服务器代码: http : //pastebin.com/cmZgSmrL


var fs = require('fs');
var formidable = require('formidable');

    //-----------------------//-------------------------------------------------------------------------------------
    //--- UPLOAD handling ---//
    //-----------------------//
    if (req.url == '/upload' && req.method.toLowerCase() == 'post') {
            var form = new formidable.IncomingForm();

            form.parse(req, function(err, fields, files) {
                    if (err) throw err;

                    fs.readFile( files.filepath.path, function (err, data) {
                            if (err) throw err;

                            var fileName = files.filepath.name;
                            fs.writeFile( __dirname + '/uploadedFiles/' + fileName, data, function (err) {
                                    if (err) throw err;

                                    //-----------------------------------------------//---------------------------------------------
                                    //--- LOAD and APPEND external JSON file with ---//
                                    //--- data from request                       ---//
                                    //-----------------------------------------------//
                                    var jsonObj = require('./storedFilesList.json');

                                    jsonObj[fileName] = {size:files.filepath.size, expDate:'-', path:__dirname + '/uploadedFiles/' + fileName};

                                    var jsonString = JSON.stringify(jsonObj); // convert JSON obj to String

                                    fs.writeFile('storedFilesList.json', jsonString, function(err){
                                            if (err) throw err;
                                            console.log('File ' + fileName + ' was succesfully written to JSON ext file.');
                                    });

                                    console.log('File ' + fileName + ' was succesfully saved.');
                            });
                    });

                    res.writeHead(200, {'content-type': 'text/plain'});
                    res.write('OK');
                    res.end( util.inspect({fields: fields, files: files}) );
            });

            return;
    }

暂无
暂无

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

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