当前位置: 首页 > 面试题库 >

基于AJAX / PHP的上传,带有进度条,可处理大文件

钮刚洁
2023-03-14
问题内容

我一直在尝试创建一个非Flash上​​传面板,该面板还显示一个进度栏。在我们的服务器上,我们有PHP
5.3(暂时无法升级到5.4,因此无法使用新的上传进度功能=> http://php.net/manual/zh-CN/session.upload-
progress.php
)。我们不能使用基于Flash的解决方案,扩展程序或类似方法。

因此,我尝试将XMLHttpRequest与AJAX结合使用。这里的问题是我只取得了部分成功。

我已经设法将大约380 MB的文件上传并保存在服务器上,但是,当尝试使用更大的文件(例如4
GB)时,该文件将不会保存在服务器上(如果我曾经检查过Firebug,说“ POST已中止”)。

另一个奇怪的是,对于相同的文件,xhr.upload.loaded从xhr.upload.total的相同维开始,并从此处开始计数。

有谁知道如何解决这个问题或有替代解决方案?

客户端代码为:

<script type="application/javascript" src="jquery.js"></script>

<script type="application/javascript">

function uploadToServer()
{
    fileField = document.getElementById("uploadedFile");
    var fileToUpload = fileField.files[0];

    var xhr = new XMLHttpRequest();
    var uploadStatus = xhr.upload;

    uploadStatus.addEventListener("progress", function (ev) {
            if (ev.lengthComputable) {
                $("#uploadPercentage").html((ev.loaded / ev.total) * 100 + "%");
            }
        }, false);

    uploadStatus.addEventListener("error", function (ev) {$("#error").html(ev)}, false);
    uploadStatus.addEventListener("load", function (ev) {$("#error").html("APPOSTO!")}, false);

    xhr.open(
            "POST",
            "serverUpload.php",
            true
            );
        xhr.setRequestHeader("Cache-Control", "no-cache");
        xhr.setRequestHeader("Content-Type", "multipart/form-data");
        xhr.setRequestHeader("X-File-Name", fileToUpload.fileName);
        xhr.setRequestHeader("X-File-Size", fileToUpload.fileSize);
        xhr.setRequestHeader("X-File-Type", fileToUpload.type);
        //xhr.setRequestHeader("Content-Type", "application/octet-stream");
        xhr.send(fileToUpload);
}



$(function(){

    $("#uploadButton").click(uploadToServer);

});


</script>

HTML部分:

<form action="" name="uploadForm" method="post" enctype="multipart/form-data">

  <input id="uploadedFile" name="fileField" type="file" multiple />

<input id="uploadButton" type="button" value="Upload!">

</form>

<div id="uploadPercentage"></div>
<div id="error"></div>

服务器端代码:

<?php

$path = "./";
$filename = $_SERVER['HTTP_X_FILE_NAME'];
$filesize = $_SERVER['CONTENT_LENGTH'];


$file = "log.txt";
$fo= fopen($file, "w");
fwrite($fo, $path . PHP_EOL);
fwrite($fo, $filename . PHP_EOL);
fwrite($fo, $filesize . PHP_EOL);
fwrite($fo, $path . $filename . PHP_EOL);

file_put_contents($path . $filename, 
file_get_contents('php://input')
);

?>

问题答案:

与Web服务器相关联的限制是PHP不能更改的。例如,它们是IIS中30
MB的默认最大邮寄请求大小…您可能还会遇到一个最大超时。与大小无关,但是您的发帖请求要花多长时间…即文件提交需要多长时间。IIS或Apache都可以限制这两个设置。



 类似资料:
  • 本文向大家介绍PHP+Ajax异步带进度条上传文件实例,包括了PHP+Ajax异步带进度条上传文件实例的使用技巧和注意事项,需要的朋友参考一下 最近项目中要做一个带进度条的上传文件的功能,学习了Ajax,使用起来比较方便,将几个方法实现就行。 前端引入文件 Ajax进度条异步处理 前端上传HTML PHP文件上传类 文件上传效果如图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多

  • 问题内容: 我正在寻找类似于uploadify的文件上传器,并带有进度条,该进度条不依赖闪存,最好使用jQuery-这可能吗? 问题答案: 当然可以。几个使用不同代码和教程的站点是: http://github.com/drogus/jquery-upload-progress(由DrJokepu忍者;) http://t.wits.sg/2008/06/25/howto-php-and-jque

  • 问题内容: 当您上传用PHP编写的文件(带有进度条)时,我想要一个Gmail中显示的AJAX文件上传器。 有人有主意吗? 谢谢。 问题答案: 您可以使用以下插件: http://aquantum-demo.appspot.com/file-upload 要么 http://valums.com/files/2010/file- uploader/demo.htm 要么 http://www.upl

  • 本文向大家介绍带有多个进度条的HTML5文件上传,包括了带有多个进度条的HTML5文件上传的使用技巧和注意事项,需要的朋友参考一下 为了使其正常工作,您需要解决xhr progress事件,该事件在所有列表项都已创建后就会触发。 该XHR 应该知道你想做什么-

  • 本文向大家介绍基于fileUpload文件上传带进度条效果的实例(必看),包括了基于fileUpload文件上传带进度条效果的实例(必看)的使用技巧和注意事项,需要的朋友参考一下 文件上传过程中,如果我们能看到进度条会更好,实现思路是服务器端用监听器实时监听进度并存入session,客户端异步请求服务器端获得上传进度,并进行效果渲染。 效果图: 服务器端servlet: 服务器端监听器: 客户端:

  • 本文向大家介绍PHP大文件切割上传并带进度条功能示例,包括了PHP大文件切割上传并带进度条功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP大文件切割上传并带进度条功能。分享给大家供大家参考,具体如下: 前面一篇介绍了PHP大文件切割上传功能,这里再来进一步讲解PHP大文件切割上传并带进度条功能。 项目结构图: 14-slice-upload-fix.html文件: 13-sl