首先,请问这不是问问题的正确方法,但这是我的第一篇文章。

我正在从事一个大学项目,并且对JavaScript(以及后来的jQuery和NodeJS)不熟悉。我正在尝试制作一个将采用CSV文件,对其进行处理并将结果加载到数据库的系统,以供系统其余部分使用的系统。

我这样做是为了可以将文件上传到目录,并具有将CSV文件处理为JSON对象的功能(我们才刚刚开始介绍数据库,因此我将必须对其进行修改以存储在数据库中),但是我目前面临的问题是...

如何将上传的文件传递/读取到函数中进行处理?

我四处搜寻并发现了类似的问题,但是这些问题通常是使用PHP或涵盖了我问题的不同方面,而并未真正涉及我的问题。

如果这是我最想念的最基本的东西,我很抱歉,但是我为此付出了努力,直到我完成第一部分之前,我无法完成其余的任务-上传,处理和存储CSV文件。

我将采纳与该问题直接相关的任何建议,或者从您认为我可能会面对的经验中获得建议,并感谢您的宝贵时间。

上载

var express = require("express");
var multer = require("multer");
var fs = require("fs");
var path = require("path");
var app = express();
var upload = multer({ dest: './uploads/'});

app.use(express.static('public'));
app.use(upload);

app.post('/api/csvUpload',function(req,res) {
    upload(req,res,function(err) {
//    console.log(req.body);
//    console.log(req.files);
        if(err) {
            return res.end("Error uploading file");
        }
        else{
            res.send("File is uploaded");
        }
    });
});

var server = app.listen(8081, function () {
    var host = server.address().address;
    var port = server.address().port;
    console.log("working on port 8081!");
});
<!DOCTYPE html>
<html>
    <head>
        <title>Home Page</title>
    </head>

    <body>

        <form id="uploadForm" action="/api/csvUpload" method="post" enctype="multipart/form-data">
            <input type="file" name="csvFile">
            <input type="submit" value="Upload File" />
        </form>

    </body>
</html>


CSV到JSON

//This will process and convert a CSV file in to a JSON objec
function csvJson(csv) {
    var lines = csv.split("\n");
    var result = [];
    var headers = lines[0].split(",");

    for(var i = 1; i < lines.length; i++) {
        var obj = {};
        var currentLine = lines[i].split(",");

        for(var j = 0; j < headers.length; j++) {
            obj[headers[j]] = currentLine[j];
        }
        result.push(obj);
    }
    return JSON.stringify(result);
};

//Below is for testing purposes
var testCSV = "userName, firstName, lastName, studentID, course\n" +
    "username1,first1,last1,123456,Software Engineering\n" +
    "username2,first2,last2,234567,Software Engineering\n" +
    "username3,first3,last3,345678,Software Engineering\n" +
    "username4,first4,last4,456789,Software Engineering";

var processedCSV = csvJson(testCSV);
console.log(processedCSV);

最佳答案

由于我尚不清楚文件的上传方式,因此我将从提供可加载(CSV)文件功能的功能开始。

要加载文件或URL,可以使用XMLHttpRequest,有关更多信息,请参见W3Schools。这是一个非常强大的对象,我建议您阅读更多内容。

 /**
 * Loads file using XMLHttpRequest
 * @param {String} path
 * @param {Function} success
 * @param {Function} error
 */
function loadFile(path, success, error) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 200) {
                if (success)
                    success(csvToJSON(xhr.responseText));
            } else {
                if (error)
                    error(xhr);
            }
        }
    };
    xhr.open("GET", path, true);
    xhr.send();
}

要使用此功能,只需执行以下代码:
loadFile('Link_to_CSV_file.csv', function (data) {
        myFunction(data);
    }, function (xhr) {
        console.error(xhr);
    });

成功加载数据后,myFunction()将与loadFile()中的数据一起执行。可以在功能中使用。

最后,在函数中加载CSV数据:
function myFunction(data){
    console.log(data);
}

PS:如果您要使用javascript函数处理CSV文件,建议将CSV文件转换为JSON;如果使用的是Node.js,请查看How to convert CSV to JSON in Node.js

08-28 01:13
查看更多