【发布时间】:2021-08-17 08:03:50
【问题描述】:
我正在尝试在上传文件和在数据库中导入数据时创建进度条。
我用 laravel 和 ajax 用 jquery 创建了一个导入器。在这个导入器中,我正在从 CSV 文件中读取所有数据。我正在从这个文件中获取所有行和列,当我阅读这个文件时,我正在用 eloquent 进行插入查询。这是我的代码:
$fp = fopen($route, 'r');
// header
$head = fgetcsv($fp, 4096, ';', '"');
$header = [];
$header[0] = 'nomape';
$header[1] = 'direccion';
$header[2] = 'cp';
$header[3] = 'ciudad';
$header[4] = 'provincia';
$header[5] = 'telefono';
$header[6] = 'movil';
$rows = 0;
$cells = 0;
// Rows
while($column = fgetcsv($fp, 8192, ';', '"'))
{
// build array to can combine header and this array
$columns = [];
foreach ($column as $val) {
array_push($columns, $this->delete_accent($val));
}
$column = array_combine($header, $columns);
$result = Listado::insert($column);
if($result){
$rows++;
}
$cells++;
}
fclose($fp);
return 'Importados un total de: ' .$rows. ' de un total de: ' . $cells;
这些操作需要时间。在我的网络browser console 和network tab 中,我可以在导入我的所有数据时显示我的http 请愿书处于待处理状态。我的 CSV 有一个 69000 寄存器。
使用此代码,我正在构建我的进度条:
$.ajax({
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = (evt.loaded / evt.total) * 100;
// Place upload progress bar visibility code here
console.log(percentComplete);
}
}, false);
return xhr;
},
但是当这些操作需要很多分钟时,这会以秒为单位返回 100% 的值。我的问题是如何才能获得真正的进度来创建我的进度条?
【问题讨论】:
-
@MartinOsusky 感谢您的回复,但我没有收到表格,我正在发送带有事件更改我的输入文件的文件
-
@MartinOsusky 是用于上传而不是用于文件处理的进度条。它将在处理第一行服务器端之前显示 100%。
-
好的,现在我明白你的目标了。这可以帮助你:laracasts.com/discuss/channels/laravel/realtime-progress-bar
-
@MartinOsusky 安装 laravel echo 并搞乱 websocket 只是为了一次上传?
标签: javascript jquery ajax laravel progress-bar