我尝试在BuddyPress中添加一个“目前为止完成的百分比”进度条,目的是阻止用户在上传完成之前离开页面。
BuddyPress中的上传过程由文件bp-core/bp-core-avatars.php中的bp_core_avatar_handle_upload()
处理。函数首先检查文件是否已使用bp_core_check_avatar_upload()
正确上传。然后检查文件大小是否在限制范围内,以及文件扩展名是否可接受(jpg,gif,png)。如果所有内容都符合要求,则允许用户裁剪图像(使用Jcrop),然后将图像移动到其真实的位置。
实际的上传由WordPress函数wp_handle_upload处理。
如何创建“完成百分比”进度条并在文件上传时显示?
5条答案
按热度按时间lyfkaqu11#
我不熟悉BuddyPress,但是所有的上传处理程序(包括androbin概述的HTML5 XHR)都有一个可以绑定的文件进度钩子点。
我已经使用了uploadify、uploadifive和swfupload,它们都可以与相同的进度函数处理程序交互,以获得相同的进度条结果。
Uploadifive是一个基于HTML5的上传程序,它只需要绑定到XHR的“progress”事件,所以所有这些属性都可以被任何HTML5上传程序使用。
至于实际的进度条代码..
超文本:
联森:
0mkxixxg2#
你应该使用一个XHR对象。我不知道它是否对你有帮助,但我写了一个简单的XHR上传程序。
超文本:
联森:
在本例中,我使用
uploadimage.php
上传文件,如果打印:“ERROR_FILESIZE”,然后发出错误警报。fhg3lkii3#
我认为,在您担心客户端的事情之前,您应该了解服务器端的需求,以便能够真正实现这一点。
对于PHP,您需要启用**session.upload_progress**,除非wp_handle_upload()函数使用了不同的东西,所以我在这里只是猜测,但很有可能他们确实使用了常规的PHP会话内容,因此需要启用它。
如果你看了给出的链接的评论,很多用户说进度状态在某些环境下不起作用,比如FastCGI上的PHP,这是你在共享主机环境中大部分时间会得到的结果。
现在很多人都告诉你使用XHR上传程序,但问题是,他们给你一个自定义upload.php脚本或类似的东西发送数据的例子,但你正在使用一个WordPress插件,你不控制(有点)
因此考虑到wp_handle_upload()实际上并不以 AJAX 方式工作,那么您必须在单击文件上传表单提交按钮时挂钩一个事件,并在JS中设置一个计时器,该计时器调用您传递表单数据(如ID)的某个URL,然后使用该ID查询会话以检查文件的进度:
有了这些数据,你就可以计算出已经传输了多少,你可以设置JS计时器每秒调用一次,但是如果上传的文件不是很大(比如大于1mb),并且连接良好,那么就不会有太多的进度需要通知。
查看this link,了解如何使用此会话上载数据的分步示例。
jaql4c8m4#
您需要插入进度条。
我认为唯一的方法是使用过滤器钩子apply_filters('bp_core_pre_avatar_handle_upload'等)覆盖函数bp_core_avatar_handle_upload。
你最终会复制大部分的功能,但是你应该能够添加你的进度条代码。
如果你得到这个工作,你应该提交它作为一个增强票;这是个好主意。
fcipmucu5#
你可以看到这个网址为XHR的例子。
访视x1月0n1x