首先,请问这不是问问题的正确方法,但这是我的第一篇文章。
我正在从事一个大学项目,并且对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。