如何使用 HTML 输入文件导入 excel 文件并在 Node.js 中读取文件内容(如何将完整路径发送到 Node.js)

Posted

技术标签:

【中文标题】如何使用 HTML 输入文件导入 excel 文件并在 Node.js 中读取文件内容(如何将完整路径发送到 Node.js)【英文标题】:How to import excel file using HTML Input file and read the file contents in Node.js (How to send the fullpath to Node.js) 【发布时间】:2020-11-06 00:15:08 【问题描述】:

我对使用 html、AngularJS 和 Node.js 读取文件有点困惑。由于我有点困惑,我希望有人可以指导我。

我正在尝试使用 HTML 和 Angularjs 导入文件,它工作正常。我能够导入文件,但我不确定如何将整个文件发送到 Node.js。由于浏览器的限制,我无法获取文件的完整路径,所以我想知道如果我不能发送完整路径,那么如何在 Node.js 中访问 Excel 文件的数据。

这是我正在处理的代码:

<div class="custom-file">
    <input type="file" fileUploader="uploadFile" class="custom-file-input"></input>
    <label class="custom-file-label" for="inputGroupFile01"> FileName </label>
</div>

我的angularjs函数应该获取FILEPATH并将其发送到相应的NODE.JS:

app.directive('fileUploader', function() 
  return 
    restrict: 'A',
    link: function (scope, element, attrs) 
      var onChangeHandler = scope.$eval(attrs.fileUploader);
      element.on('change', onChangeHandler);
      element.on('$destroy', function() 
        element.off();
      );

    
  ;
);

app.controller('TemplatesController',function($scope)
        
    $scope.FileName     =   "Choose a Excel File";
    
    //Import an Excel File from the Local System
    $scope.uploadFile = function(event)
        var files = event.target.files;
        $scope.FileName = files[0].name;
        console.log($scope.FileName)
        $http(
            url     : "/UploadFIle",
            method  : "post",
            file    : files[0] //PATH OF THE FILE WHICH I AM UNABLE TO GET
        ).success(function(response) 
            console.log(response);
        );


    ;
);

我的index.js 将路由到相应的节点控制文件:

//Read the Excel File Data
app.post('/UploadFIle',function(req,res)
    console.log(req.body);
    ReadExcelFile.ReadExcelFileContent(req.body,function(data)
        console.log("INDEX JS");
        console.log(data);
    );
);

我的Node.js函数将从获得的文件中读取数据:

//ReadExcelFile.js

const xlsxFile      =   require('read-excel-file/node');

exports.ReadExcelFileContent    =   function(req,callback)
    
    var fileLocation    =   req.path; //NOT SURE HOW TO ACCESS THE FILEPATH HERE BECAUSE I WANT TO READ THE DATA HERE
    console.log(fileLocation);

此外,在文件上传后,我试图更改 FileName 的名称,但似乎有两种方式数据绑定不起作用,因为在 HTML 页面中它不显示我刚刚上传的 FileName

再次您好,我尝试了很多方法来将读取文件的路径发送到 Node.js,但它们都不起作用。我该如何解决这个问题?

【问题讨论】:

角度代码的方法是get(方法:“get”,),您正在等待/收听node.js中的post。检查这是不是问题。 @Mu-Majid 感谢您的回复。不,实际上我正在尝试一些事情,那时我可能会搞砸这件事。其实是POST 因为我需要发送文件的路径 @Mu-Majid 知道如何进行这项工作吗?尝试了更多的东西,但没有运气 检查我的答案,我附上了一篇文章,逐步解释了后端和前端。 【参考方案1】:

正如您在问题中提到的,您无法访问操作系统的文件系统,因为浏览器中的 javascript 无法访问文件系统。

我找到了this article,它解释了如何在后端 (NodeJS/ExpressJS) 和前端 (AngularJS) 处理文件上传。

前端示例使用ng-file-upload 模块。

现在您可以从磁盘中选择一个文件,将其上传并发送到您的 NodeJS 服务器,并在您的 multer 中间件运行后访问文件数据(在文章中进行了说明)。希望对您有所帮助:)。

【讨论】:

【参考方案2】:

为什么要发送文件路径?将文件添加到 UI 中的输入标签后,它就有了您的文件。那么你想将该文件发送到node.js

app.controller('TemplatesController',function($scope)
        
    $scope.FileName     =   "Choose a Excel File";
    
    //Import an Excel File from the Local System
    $scope.uploadFile = function(event)
        var files = event.target.files;
        $scope.FileName = files[0].name;
        console.log($scope.FileName)
        $http(
            url     : "/UploadFIle",
            method  : "post",
            file    : files[0] // send your file
        ).success(function(response) 
            console.log(response);
        );


    ;
);

你也可以这样改变你的文件名

app.controller('TemplatesController',function($scope)
        
    $scope.FileName     =   "Choose a Excel File";
    
    //Import an Excel File from the Local System
    $scope.uploadFile = function(event)
        var files = event.target.files;
        files[0].name = 'xxxxx'  // change file name 
        $scope.FileName = files[0].name;
        console.log($scope.FileName)
        $http(
            url     : "/UploadFIle",
            method  : "post",
            file    : files[0] // send your file
        ).success(function(response) 
            console.log(response);
        );


    ;
);

在您可以使用 nodejs 将该文件保存在任何地方之后

【讨论】:

非常感谢您的回复。我正在尝试发送路径,因为我想读取 node.js 中的 Excel 文件数据。我用file : files[0] // send your file 尝试了Angularjs Controller 方法,但在这里我会发送文件的just name 对吗? node.js 如何知道它的位置?同样在index.js 中,当我尝试console.log(req.body) 时,我得到,这意味着它无法得到任何东西。我是否必须为file 类型更改任何内容,因为通常当我们发送data 时,我们可以直接在node.js 中访问它。我已经编辑了代码,请检查一次。 试试这个和$http.post(url, JSON.stringify(file: files[0] ))then(function (response) console.log(response)) 然后在 node.js 中使用 console.log(req.body) 我试过你提到的。我在index.js: ' file: ' 中得到以下结果。只是想确认我们是否必须在 angularjs 中以 filedata 发送?【参考方案3】:

因为 Angular 只是在浏览器上运行的 JS 代码,所以它无法访问文件系统。您需要做的就是将文件上传到您的后端服务器,然后服务器使用SheetJS 之类的库解析 excel 文件,并将文件内容以 JSON 格式返回给客户端

【讨论】:

以上是关于如何使用 HTML 输入文件导入 excel 文件并在 Node.js 中读取文件内容(如何将完整路径发送到 Node.js)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHPExcel 解析响应表导入 Excel 文件以输入标签(例如:自动填充输入 id="fname" 到 Hello 并输入 id="lname"

如何把SQLServer表数据导出为Excel文件

在step7中如何将EXCEL文件导入DB块中

如何将文件夹内的文件名自动写入excel表格

VBA批量导入文本文件,如何转换二维数组?

pl/sql 如何将Excel文件数据导入oracle的数据表?