【问题标题】:Laravel ajax file upload (excel file: 1M+ rows)Laravel ajax 文件上传(excel 文件:1M+ 行)
【发布时间】:2020-02-16 10:45:51
【问题描述】:

我正在尝试在 Laravel 中为我的 excel 文件上传创建适当的进度条 我正在使用 ajax 上传文件,并获得了上传部分的进度条以“关闭”工作。我唯一的问题是,当文件上传(上传部分 100% 完成)时,它仍然显示“上传...”。完成后,uploadProgress 似乎不会跳转到 success

文件由laravel-excel在后面处理,处理1M+行的大excel文件需要很长时间。

这也是它的截图。我在控制台记录了进度,一切都很好,直到它应该转到 ajax 调用中的 success 函数。

我能做些什么来解决这个问题?我无法限制 excel 文件上传中的行数,因为我正在创建的网站需要上传具有这么多或更多行的文件。

另外,我的 ajax 上传代码:

    // AJAX form upload
    var form = $('.form-import');
    var bar = $('.import-progress-bar');
    var status = $('.import-status');

    form.ajaxForm({
        beforeSend: function() {
            status.empty();
            bar.attr('value', 0);
        },
        uploadProgress: function(event, position, total, percentComplete) {
            bar.attr('value', percentComplete);
            status.html('Uploading...');
            console.log('Upload progress - '+ percentComplete + '%');
        },
        success: function() {
            status.html('Importing rows...');
        },
        complete: function() {
            status.html('Importing complete!');
        }
    });

【问题讨论】:

  • 您有任何错误吗?你能创建一个小提琴吗?您使用的 jQuery 版本是什么?你确定状态查询正确吗?
  • 没有错误。我可以看到请求没有完成,因为我可以在数据库中看到正在添加行。但是文件上传了,只有进程在运行。我正在使用 jquery 3.4.1 和 jquery-form。是的,当我开始上传时,状态元素正在更新。
  • 服务器错误日志是否开启?
  • 是的,日志记录已开启。没有错误。上传进度达到 100% 后,ajax 将不会进入下一个功能(成功)。但我正在使用下面@Zoli 发布的解决方案来修复它。

标签: javascript php excel ajax laravel


【解决方案1】:

我会使用 mysql LOAD DATA INTO,将 Excel (csv) 文件处理到数据库中。我有一个类似的任务,有几个 5-600 MB 的 csv 文件,这会产生 php 运行时错误。

使用LOAD DATA INTO,我可以在几秒钟内导入这些文件,没有任何问题。

阅读更多:

https://dev.mysql.com/doc/refman/8.0/en/load-data.html

【讨论】:

  • 如果我想导入的数据不需要验证,这可能会起作用。但是单元格中的所有数据都经过某种方式的验证。
  • 您可以在中间表中导入,并使用后端作业处理数据。这样你也可以计算数据,并且将大大降低硬件消耗过程。
  • 哦,好的。我觉得我懂了。谢谢!如果我让它工作,我会尝试这样做并在这里发表评论。 :)
  • 我会为导入的行使用(生成的)作业 ID,并将作为对 UI 的响应发回(并将其保存在本地存储中)。然后,可以不时地查询中间表,使用该特定的 job_id 处理了多少行。
  • 啊,是的,将 job_id 添加到上传的文件中,然后稍后再查询它是个好主意。我对 laravel 中的工作等不太熟悉,但我会看看它。无论如何,我看起来不像让会话的东西正常工作,所以谢谢你的提示! :)
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 2016-07-21
  • 1970-01-01
  • 2014-04-19
  • 2019-07-26
  • 1970-01-01
  • 2016-07-11
相关资源
最近更新 更多