WordPress模板插件定制

您现在的位置是:首页 > WordPress教程WordPress教程

WordPress大文件上传处理

查看 WP集市 的更多文章WP集市 2025-09-08 【WordPress教程】 332人已围观

  1. 咱先唠唠为啥WordPress默认传不了大文件。这玩意儿其实跟php配置掐着脖子呢,你服务器那头设了个破门槛,比如upload_max_filesize才2M,那超过2兆的视频啊压缩包啊全得吃闭门羹。别怪WordPress,它就是个跑堂的,后厨不给料它也没辙。

  2. 第一步咱直接捅服务器配置。搞个php.ini文件扔到网站根目录(跟wp-config.php当邻居),里头塞这几行:

    upload_max_filesize = 256M
    post_max_size = 256M
    max_execution_time = 300

    这波操作是把上传门槛踹开到256兆,顺便给执行时间松绑。不过注意啊,虚拟主机用户可能没权限改这个,得找主机商扯皮。

  3. 要是改不了服务器配置,咱还能在WordPress肚子里动手脚。打开主题的functions.php文件,塞个过滤钩子:

    add_filter( 'upload_size_limit', 'boost_upload_size' );
    function boost_upload_size( $size ) {
    return 512000; // 单位是字节,这儿直接怼到500KB
    }

    这招其实鸡肋,只能调低不能调高,但配合后续手段能攒个组合技。

  4. 终极方案是绕开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();
}
  1. 别忘了对付超时问题。有时候传大文件跟老太太走路似的,服务器等着等着就睡着了。得在.htaccess里加个心跳包:

    <IfModule mod_php7.c>
    php_value max_input_time 300
    php_value default_socket_timeout 300
    </IfModule>
  2. 最后整个活——用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;
    }
  3. 实在没辙就祭出终极奥义:FTP直传。通过FTP把大文件怼进wp-content/uploads文件夹,然后跑个媒体库扫描插件(如Add From Server)强制WordPress认领这些野文件。虽然土但管用,适合那种几个G的设计稿压缩包。

总结下来就是:服务器配置是地基,分片上传是钢筋,云存储是装修队。三管齐下才能让WordPress扛住蓝光视频原画素材之类的庞然大物。别跟默认设置死磕,灵活绕道才是老玩家的生存之道。

Tags:

WordPress模板插件定制

WP集市

V管理员
文章 723 篇 | 评论 0 次
最新文章