【问题标题】:Using jQuery AJAX and PHP to create a progress bar for file uploading使用 jQuery AJAX 和 PHP 创建文件上传进度条
【发布时间】:2015-11-19 03:28:45
【问题描述】:

首先,我希望每个人都明白,我确实查看了 stackoverflow 上的所有其他示例,但根本没有一个对我有用。我想要做的是创建一个进度条,显示文件已上传到 100%。我有 3 个脚本:包含表单的 upload.php、用于上传文件的脚本 fileUpload.php 和包含 jQuery AJAX 代码的 script.js。

似乎没有任何效果。使用我下面的代码,Ajax 返回一条成功消息,但是进度条没有改变,没有任何内容上传到文件夹,文件本身保留在文件输入中。问题在于 script.js 中的 ajax 代码,因为我可以在没有 ajax 代码的情况下上传文件。

/* upload.php
--------------------------------------------------------*/
<div class="form-wrapper">
    <form method="post" id="uploadForm" action="fileUpload.php" role="form" enctype="multipart/form-data">
        <legend>Upload</legend>
        <div class="form-group">
            <label for="fileUpload">File</label>
            <input type="file" id="fileUpload" name="fileUpload"/>
        </div>
        <button type="submit" id="uploadBtn" class="btn btn-success">Submit</button>
    </form>
    <br>
    <div id="progress" class="progress">
        <div id="progress-bar" class="progress-bar progress-bar-striped active" role="progressbar"
        aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">
        </div>
    </div>
    <span id="sr-only"></span>
</div>


/* fileUpload.php
--------------------------------------------------------*/
<?php

if ($_FILES['fileUpload']['size'] != 0) {

    $name = $_FILES['fileUpload']['name'];
    $data = $_FILES['fileUpload']['tmp_name'];

    $fileDir = "C:\\wamp\\www\\Business\\Images\\$name";
    move_uploaded_file($data, $fileDir);
} 
?>


/* script.js
--------------------------------------------------------*/
$(document).ready(function() {

    $("#progress").hide();
    $("#uploadForm").on('submit', function(e){
        e.preventDefault();

        var $form = $(this);
        $.ajax({
            type: $form.attr('method'),
            url: $form.attr('action'),
            data: $form.serialize(),
            beforeSend:function() {
                $("#progress").show();
            },
            uploadProgress:function(event, position, total, percentageComplete) {
                $("#progress-bar").attr("value", percentageComplete);
                $("#progress-bar").width(percentageComplete + "%");
            },
            success:function() {
                $("#sr-only").html("Success");
            }
        });
    });
});

【问题讨论】:

标签: javascript php jquery ajax file-upload


【解决方案1】:

查看 PHP AJAX 文件上传的 jQuery 进度条,这将完成这项工作。

显示进度条的文件上传表单

<form id="uploadForm" action="upload.php" method="post">
    <div>
        <label>Upload Image File:</label>
        <input name="userImage" id="userImage" type="file" class="demoInputBox" />
    </div>
    <div><input type="submit" id="btnSubmit" value="Submit" class="btnSubmit" /></div>
    <div id="progress-div"><div id="progress-bar"></div></div>
    <div id="targetLayer"></div>
</form>
<div id="loader-icon" style="display:none;"><img src="LoaderIcon.gif" /></div>

jQuery 表单提交

$(document).ready(function() { 
    $('#uploadForm').submit(function(e) {   
        if($('#userImage').val()) {
            e.preventDefault();
            $('#loader-icon').show();
            $(this).ajaxSubmit({ 
                target:   '#targetLayer', 
                beforeSubmit: function() {
                    $("#progress-bar").width('0%');
                },
                uploadProgress: function (event, position, total, percentComplete){ 
                    $("#progress-bar").width(percentComplete + '%');
                    $("#progress-bar").html('<div id="progress-status">' + percentComplete +' %</div>')
                },
                success:function (){
                    $('#loader-icon').hide();
                },
                resetForm: true 
            }); 
            return false; 
        }
    });
});

http://phppot.com/jquery/jquery-progress-bar-for-php-ajax-file-upload/

【讨论】:

  • 我试过这种方法。表单根本不提交。
猜你喜欢
  • 2012-09-12
  • 2011-04-16
  • 2013-01-25
  • 2012-04-29
  • 2011-06-18
相关资源
最近更新 更多