簡體   English   中英

如何將上傳的CSV文件傳遞到我的函數中?

[英]How do I pass an uploaded CSV file, into my function?

首先,請原諒我,如果這不是提問的正確方法,但這是我的第一篇文章。

我正在從事大學項目,不熟悉 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文件轉換為JSON,如果您使用的是Node.js,請查看如何在Node.js中將CSV轉換為JSON

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM