【问题标题】:Upload mass data to Firebase将海量数据上传到 Firebase
【发布时间】:2016-04-08 13:08:42
【问题描述】:

我正在尝试将我的 CSV 数据上传到 Firebase,但它抛出了一个奇怪的错误。我对 JavaScript 不是很熟悉,所以这可能是问题的一部分。

这是我要上传的数据:

704,STANDARD,PARC PARQUE,PR,NOT ACCEPTABLE,17.96,-66.22,"Parc Parque, PR"
704,STANDARD,SECT LANAUSSE,PR,NOT ACCEPTABLE,17.96,-66.22,"Sect Lanausse, PR"
704,STANDARD,URB EUGENE RICE,PR,NOT ACCEPTABLE,17.96,-66.22,"Urb Eugene Rice, PR"
704,STANDARD,URB GONZALEZ,PR,NOT ACCEPTABLE,17.96,-66.22,"Urb Gonzalez, PR"

我没有使用任何花哨的东西来尝试上传文档,这似乎是以我想要的样式上传所有内容的最快方法:

<!DOCTYPE html>

<head>
</head>

<body>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script>
<script type="text/javascript">
$(function () {
    var myFirebaseRef = new Firebase("https://<firebasetag>.firebaseio.com/coordinates");

    var onComplete = function(error) {
      if (error) {
        console.log('Synchronization failed: ' + error);
      } else {
        console.log('Synchronization succeeded');
      }
    };

    $("#upload").bind("click", function () {
        var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt)$/;
        if (regex.test($("#fileUpload").val().toLowerCase())) {
            if (typeof (FileReader) != "undefined") {
                var reader = new FileReader();
                reader.onload = function (e) {
                    var rows = e.target.result.split("\n");
                    for (var i = 0; i < rows.length; i++) {
                        var cells = rows[i].split(",");
                        myFirebaseRef.set({
                            [cells[0]]: {
                                zipcodetype: cells[1],
                                city: cells[2],
                                state: cells[3],
                                locationtype: cells[4],
                                latitude: cells[5],
                                longitude: cells[6],
                                locationttext: cells[7]
                            }
                        }, onComplete);                    
                    }
                }
                reader.readAsText($("#fileUpload")[0].files[0]);
            } else {
                alert("This browser does not support HTML5.");
            }
        } else {
            alert("Please upload a valid CSV file.");
        }
    });
});
</script>
<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" />
</div>

</body>

<html>

这就是数据库中显示的全部内容:

它的作用是只上传一行,但“同步成功”总是打印在我的控制台中。

我希望它上传每一行,因为我的原始数据大约有 90,000 行长。帮忙?

【问题讨论】:

  • 如果所有cells[0] 都等于704,你期望的结果是什么???
  • 它只上传一行,而不是整个文档。当我用控制台打印替换 firebase 上传时,它会打印所有内容。关于我如何处理 firebase 调用的一些事情会阻止此代码中的大量上传
  • 但是因为你总是设置相同的项目,覆盖任何前一个项目,704 === 704。我不是一个火力人,但你可能想推它:firebase.com/docs/web/api/firebase/push.html
  • 呃....天哪,我才意识到这一点。感谢您向我指出这一点。我没有想到它直到最后都用新数据覆盖了保存。你知道对此有什么补救措施吗?上面写着“等到最后一次 firebase 调用完成后再继续”?
  • 您可能不是白痴...很高兴您已修复它并感谢您发布相关答案。它对任何未来的读者都非常有帮助。

标签: javascript jquery csv firebase


【解决方案1】:

对于任何在代码中寻找答案的人来说,这就是工作模型。

<!DOCTYPE html>

<head>
</head>

<body>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script>
<script type="text/javascript">
$(function () {
    var myFirebaseRef = new Firebase("https://<firebaseid>.firebaseio.com/coordinates");

    $("#upload").bind("click", function () {
        var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt)$/;
        if (regex.test($("#fileUpload").val().toLowerCase())) {
            if (typeof (FileReader) != "undefined") {
                var reader = new FileReader();
                reader.onload = function (e) {
                    var rows = e.target.result.split("\n");
                    for (var i = 0; i < rows.length; i++) {
                        var cells = rows[i].split(",");
                        myFirebaseRef.push({
                            [cells[0]]: {
                                zipcodetype: cells[1],
                                city: cells[2],
                                state: cells[3],
                                locationtype: cells[4],
                                latitude: cells[5],
                                longitude: cells[6],
                                locationttext: cells[7]
                            }
                        });                    
                    }
                }
                reader.readAsText($("#fileUpload")[0].files[0]);
            } else {
                alert("This browser does not support HTML5.");
            }
        } else {
            alert("Please upload a valid CSV file.");
        }
    });
});
</script>
<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" />
</div>

</body>

<html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多