通过ajax请求上传文件时读取文件大小

Posted

技术标签:

【中文标题】通过ajax请求上传文件时读取文件大小【英文标题】:read filesize while uploading it through ajax request 【发布时间】:2011-11-05 23:31:47 【问题描述】:

我正在尝试以这种方式上传文件时读取文件的文件大小

1 .开始一个 $.ajax();请求启动服务器到服务器下载文件(我正在使用 php fopen + stream_copy_to_stream );

2 。开始第二个 $a.ajax();请求每个tot时间并尝试读取当前文件大小直到下载过程结束;

不幸的是,这没有按预期工作。

两个请求均正确发出,但文件大小仅在文件完全传输后才被读取。所以我在流程结束时而不是同时收到所有警报消息

我想我正在做一些无法做到的事情?还是我只是错过了什么?

伪代码:

var uploadStart = 0;
function startUploadProgressBar(file) 
    var file = file;
    uploadStart = setInterval(function() 
        $.ajax(
            data: 'uploadProgress=1&file=' + file,
            success: function(json) 
                alert(json.filesize)
            
        );

    ,
    1000);

$('#submit').click(function() 
    var file = somevar;
    startUploadProgressBar(file);
    $.ajax(
        success: function(json) 
            clearInterval(uploadStart);
        
    );
    return false;
);

【问题讨论】:

【参考方案1】:

只是为了通过ajax上传文件,你可以考虑使用jQuery表单插件。据我所知,它支持进度条。

如果您想坚持自己的方法,请通读 PHP 手册中 function's manual page 的 cmets。有一些替代方案可以修改输出传输的状态。

【讨论】:

我不是从客户端上传到服务器,而是从服务器上传到服务器【参考方案2】:

为什么不让 PHP 页面使用 filesize() 返回文件本身的大小?这样您就不需要反复轮询。

【讨论】:

我需要逐步获取文件大小(),而不仅仅是在最后!你明白吗? 您想要为上传生成进度条。在传输开始前对文件使用filesize(),以获得文件总大小,而不会出现任何文件访问问题。然后跟踪您传输了多少文件。该比率是您的进度条更新。如果这不是您正在做的,您需要更新问题以进一步澄清问题。

以上是关于通过ajax请求上传文件时读取文件大小的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter AJAX文件上传,上传时$_FILE为空

Django之AJAX文件上传

当通过ajax mvc上传文件HttpPostedFileBase时返回null

通过Ajax方式上传文件,使用FormData进行Ajax请求

通过Ajax方式上传文件,使用FormData进行Ajax请求

通过Ajax方式上传文件,使用FormData进行Ajax请求