使用javascript显示来自s3的csv

yebdmbv4  于 2021-09-23  发布在  Java
关注(0)|答案(0)|浏览(208)

因此,我有一个任务,使用javascript将s3存储桶中的csv连接到静态网页。我知道使用javascript上传和显示用户输入的csv非常简单,但我希望用户按下按钮,在网页上加载/显示整个csv。我现在有一个叫做“生成统计信息”的按钮,我希望它能做三件事:上传csv,显示csv,以及显示一些静态文本,比如平均年龄。我这样做部分是为了解决使用lambda的问题,因为到目前为止,我在这方面失败得很惨。
理想情况下,我希望页面最初看起来像这样:

然后,在用户单击按钮后,我希望页面上传数据集,如下所示。请注意,我只能通过让用户从本地手动上传csv来实现这一点,这就是为什么文件上传按钮仍然存在的原因。我希望去掉这个按钮,只让“生成统计信息”按钮工作:

当我在小提琴上运行这个时,我得到了一个404错误。有人知道我哪里会出错吗?
我的html代码如下。我从这个github获得了csv格式部分,从这里获得了javascript/s3连接部分。

<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>HTML5 File API</title>
</head>
<body >
  <div>
    <form class="form-horizontal well">
      <legend>
        <h3>
          <div id="title">HTML5 File API</div>
        </h3>
      </legend>
      <fieldset>
          <label for="csvFileInput"> <strong>CSV File:</strong>
          </label>
          <button onclick="myFunction()">Generate Statistics</button>
        </div>
      </fieldset>
    </form>
    <div id="output">
    <p id="demo"></p>
    </div>
  </div>
  <br>
  <br>
  <footer>
    <center>
      <p>&copy; Mounir Messelmeni 2012</p>
    </center>
  </footer>

  <!-- Le javascript
    ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  <script type="text/javascript" src="js/read-csv.js"></script>

  <script>
  function myFunction() {
    myvar = 'Average Age is 37';
  document.getElementById("demo").innerHTML = myvar;}
  </script>

  <script src="messages.js">
  var AWS = require('aws-sdk');
  AWS.config.update(
    {
      accessKeyId: "X",
      secretAccessKey: "X",
    }
  )
  var s3 = new AWS.S3();
  s3.getObject(
    { Bucket: "fakeemployee", Key: "Employee_Attrition_Data.csv" },
    function (error, data) {
      if (error != null) {
        alert("Failed to retrieve an object: " + error);
      } else {
        alert("Loaded " + data.ContentLength + " bytes");
        // do something with data.Body
        var csv = data.Body;
        processData(csv);
      }
    }
  )
  function processData(csv) {
      var allTextLines = csv.split(/\r\n|\n/);
      var lines = [];
      while (allTextLines.length) {
          lines.push(allTextLines.shift().split(','));
      }
    console.log(lines);
    drawOutput(lines);
  }

  //if your csv file contains the column names as the first line
  function processDataAsObj(csv){
      var allTextLines = csv.split(/\r\n|\n/);
      var lines = [];

      //first line of csv
      var keys = allTextLines.shift().split(',');

      while (allTextLines.length) {
          var arr = allTextLines.shift().split(',');
          var obj = {};
          for(var i = 0; i < keys.length; i++){
              obj[keys[i]] = arr[i];
    }
          lines.push(obj);
      }
          console.log(lines);
    drawOutputAsObj(lines);
  }

  function errorHandler(evt) {
    if(evt.target.error.name == "NotReadableError") {
        alert("Canno't read file !");
    }
  }

  function drawOutput(lines){
    //Clear previous data
    document.getElementById("output").innerHTML = "";
    var table = document.createElement("table");
    for (var i = 0; i < lines.length; i++) {
        var row = table.insertRow(-1);
        for (var j = 0; j < lines[i].length; j++) {
            var firstNameCell = row.insertCell(-1);
            firstNameCell.appendChild(document.createTextNode(lines[i][j]));
        }
    }
    document.getElementById("output").appendChild(table);
  }

  //draw the table, if first line contains heading
  function drawOutputAsObj(lines){
    //Clear previous data
    document.getElementById("output").innerHTML = "";
    var table = document.createElement("table");

    //for the table headings
    var tableHeader = table.insertRow(-1);
    Object.keys(lines[0]).forEach(function(key){
        var el = document.createElement("TH");
        el.innerHTML = key;
        tableHeader.appendChild(el);
    });

    //the data
    for (var i = 0; i < lines.length; i++) {
        var row = table.insertRow(-1);
        Object.keys(lines[0]).forEach(function(key){
            var data = row.insertCell(-1);
            data.appendChild(document.createTextNode(lines[i][key]));
        });
    }
    document.getElementById("output").appendChild(table);
  }
  </script>
  </body>
  </html>

编辑:我已确认s3桶/钥匙正确。请看我的水桶截图:

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题