通过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为空
当通过ajax mvc上传文件HttpPostedFileBase时返回null
通过Ajax方式上传文件,使用FormData进行Ajax请求