
您现在的位置是:首页 > WordPress教程WordPress教程
WordPress大文件上传处理
WP集市
2025-09-08
【WordPress教程】
332人已围观
-
咱先唠唠为啥WordPress默认传不了大文件。这玩意儿其实跟php配置掐着脖子呢,你服务器那头设了个破门槛,比如
upload_max_filesize
才2M,那超过2兆的视频啊压缩包啊全得吃闭门羹。别怪WordPress,它就是个跑堂的,后厨不给料它也没辙。 -
第一步咱直接捅服务器配置。搞个
php.ini
文件扔到网站根目录(跟wp-config.php当邻居),里头塞这几行:upload_max_filesize = 256M post_max_size = 256M max_execution_time = 300
这波操作是把上传门槛踹开到256兆,顺便给执行时间松绑。不过注意啊,虚拟主机用户可能没权限改这个,得找主机商扯皮。
-
要是改不了服务器配置,咱还能在WordPress肚子里动手脚。打开主题的functions.php文件,塞个过滤钩子:
add_filter( 'upload_size_limit', 'boost_upload_size' ); function boost_upload_size( $size ) { return 512000; // 单位是字节,这儿直接怼到500KB }
这招其实鸡肋,只能调低不能调高,但配合后续手段能攒个组合技。
-
终极方案是绕开WordPress自带的上传机制。整个分片上传插件比如FileBird,或者自己写个上传处理器。举个栗子,用JS分片后通过AJAX传递:
// 伪代码:用File API切片 const chunkSize = 5 * 1024 * 1024; // 每片5MB let file = document.getElementById('big-file').files[0]; let chunks = Math.ceil(file.size / chunkSize);
for (let i = 0; i < chunks; i++) { let chunk = file.slice(i chunkSize, (i+1) chunkSize); let formData = new FormData(); formData.append('chunk', chunk); formData.append('chunkIndex', i);
// 用AJAX发送到自定义接口
fetch('/wp-admin/admin-ajax.php?action=handle_chunk', {
method: 'POST',
body: formData
});
}
5. 服务端得接住这些碎片。在插件里注册个AJAX处理钩子:
```php
add_action('wp_ajax_handle_chunk', 'handle_file_chunks');
add_action('wp_ajax_nopriv_handle_chunk', 'handle_file_chunks');
function handle_file_chunks() {
$chunk = $_FILES['chunk']['tmp_name'];
$index = intval($_POST['chunkIndex']);
// 把碎片暂存到wp-content/uploads/chunks/
$upload_dir = wp_upload_dir();
$chunk_path = $upload_dir['basedir'] . '/chunks/chunk-' . $index;
move_uploaded_file($chunk, $chunk_path);
// 当最后一片到达时合并文件
if ($index === $_POST['totalChunks'] - 1) {
$final_path = $upload_dir['path'] . '/' . $_POST['fileName'];
for ($i = 0; $i < $_POST['totalChunks']; $i++) {
file_put_contents($final_path, file_get_contents($upload_dir['basedir'] . '/chunks/chunk-' . $i), FILE_APPEND);
}
// 清理碎片文件夹
array_map('unlink', glob($upload_dir['basedir'] . '/chunks/chunk-*'));
}
wp_die();
}
-
别忘了对付超时问题。有时候传大文件跟老太太走路似的,服务器等着等着就睡着了。得在.htaccess里加个心跳包:
<IfModule mod_php7.c> php_value max_input_time 300 php_value default_socket_timeout 300 </IfModule>
-
最后整个活——用WordPress的
plupload_init
过滤器白嫖第三方存储。比如把文件甩到云存储减轻服务器压力:add_filter('plupload_init', 'redirect_uploads_to_s3'); function redirect_uploads_to_s3($config) { $config['url'] = 'https://my-bucket.s3.amazonaws.com'; $config['multipart_params']['acl'] = 'public-read'; return $config; }
-
实在没辙就祭出终极奥义:FTP直传。通过FTP把大文件怼进wp-content/uploads文件夹,然后跑个媒体库扫描插件(如Add From Server)强制WordPress认领这些野文件。虽然土但管用,适合那种几个G的设计稿压缩包。
总结下来就是:服务器配置是地基,分片上传是钢筋,云存储是装修队。三管齐下才能让WordPress扛住蓝光视频原画素材之类的庞然大物。别跟默认设置死磕,灵活绕道才是老玩家的生存之道。
Tags:
文章版权声明:除非注明,否则均为WP集市原创文章,转载或复制请以超链接形式并注明出处。
上一篇:WordPress文件损坏修复
下一篇:WordPress上传限制优化

热门文章
