2

我想在我的上传代码中添加一个进度条,所以我已经安装了 uploadprogress 扩展(实际上我已经将我的 wamp 服务器降级到 wamp 2.0,因为这个已经有扩展但新版本似乎有问题)

这是我的后端代码

/////////////////上传中

<?php


if (isset($_POST['upload'])) {
    echo 'UPLOADING . . . <br />';

    $location = './uploads';
    $new= uniqid().'.'.end(explode('.' , basename($_FILES['mailfile']['name']) ));  
    if(move_uploaded_file( $_FILES['mailfile']['tmp_name'],"$location/$new"))
       echo 'DONE !! ';
    else
       echo 'error';

}

////////////// 获取上传信息

else if(isset($_GET['get_info']))
{
        if (function_exists("uploadprogress_get_info")) {

            $info = uploadprogress_get_info($_GET['get_info']);
        } else {
            $info = 'nofunc';
        }
        var_dump($info);
}

//////////////上传表单

else
{           $uploadID = substr(md5(microtime(true)), 0, 10);
    ?>

            <form enctype="multipart/form-data" action="uploadprogress.php" method="post" >
                <input type="text" name="UPLOAD_IDENTIFIER"  value="<?php echo $uploadID; ?>" id="uploadIdentifier" />
                <input id="file" name="mailfile" type="file" />
                <input type="submit" value="Send File" id="btn" name="upload" />
            </form>

    <?php
}

这是我在上传文件时的前面 html/jquery 代码,它从 iframe 获取 UPLOAD_IDENTIFIER 值并将其发送到 set() 函数,该函数假设通过 ajax 调用获取上传进度,但它总是返回 null

<html>
    <head>
    <script language="javascript" src="../../js/jquery.js"></script>
        <script>
        var val;
        $(function(){

            $('#progress_iframe').load(function() {
                var ifr = $(this);

              $(this)
                .contents()
                .find('#btn')
                .bind('click', function() {

                    val = ifr.contents().find('#uploadIdentifier').val();
                     set();

                    //  do stuff
                });
            });

        })


function set() { 
   $.get('uploadprogress.php' , {get_info : val} , function(data){
      data = $.trim(data);
     $('#info').html(data) ;
     if(data < 100  )
     set();
   })
  }


        </script>
    </head>
    <body>

<div>
<iframe id="progress_iframe" src="uploadprogress.php" frameborder="0">   </iframe>
<span id="info"></span>     
</div>
    </body>
</html>

所以文件上传没有任何问题,我尝试了一个大文件,但仍然在上传文件时,uploadprogress_get_info 为空

4

1 回答 1

0
  1. 检查 UploadProgress tmp 目录是否可以在服务器上访问。这意味着“uploadprogress.file.filename_template”指的是 phpinfo 中正确的 tmp 文件夹。

  2. 您可以运行以下代码来检查这一点。

    背景颜色:红色;"';打印 ">问题。";














    if ($template == $templateini) {
    print "uploadprogress.file.filename_template ($templateini) 中没有用于制作唯一临时文件的 %s。请调整。<br/>";

    _
    _ ;
    }
    } else {
    print 'background-color: green;">uploadprogress 扩展已安装,初始检查显示一切正常';
    }
    } else {
    ?>
    background-color: red;">未安装 uploadprogress 扩展。
    <

    </div>

  3. 如果上面的代码出错,请在 php.ini 文件中指向正确的 tmp 目录。在 Windows localhost 机器上的 Xampp tmp 目录的 php.ini 文件中添加了以下行。uploadprogress.file.filename_template = C:\xampp\tmp\some_name_%s.txt

  4. 现在你的代码应该可以工作了。

于 2015-04-28T06:51:37.780 回答