You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派PHP文件上传如何保留原文件名而非随机命名?

保留上传文件原文件名的修改方案

嘿,我看了你的代码,要保留原文件名其实很简单,核心就是改掉生成随机文件名的那一行。咱们一步步来:

首先,你的代码里这一行是生成随机文件名的关键:

$file_name_new = uniqid('', true) . '.' . $file_ext;

你已经从$_FILES['file']['name']获取到了原文件名$file_name,直接用它替换掉随机生成的文件名就行。

修改后的完整代码

<!DOCTYPE html> 
<html> 
<body> 
<form action="upload.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="file"> 
<input type="submit" value="upload"> 
</form> 
<?php 
if(isset($_FILES['file'])) { 
    $file = $_FILES['file']; 
    $file_name = $file['name']; 
    $file_tmp = $file['tmp_name']; 
    $file_size = $file['size']; 
    $file_error = $file['error']; 
    $file_ext = explode('.', $file_name); 
    $file_ext = strtolower(end($file_ext)); 
    // 注意:你当前只允许txt和jpg格式,若要支持任意扩展名,可修改/移除下面的allowed数组和检查
    $allowed = array('txt', 'jpg'); 
    
    if(in_array($file_ext, $allowed)) { 
        if($file_error === 0) { 
            if($file_size <= 1073741824) { 
                // 直接使用原文件名,不再生成随机名
                $file_destination = './files/' . $file_name; 
                if(move_uploaded_file($file_tmp, $file_destination)) { 
                    echo "文件上传成功,路径:" . $file_destination; 
                } else {
                    echo "文件移动失败,请检查files目录权限";
                }
            } else {
                echo "文件大小超过限制(最大支持1GB)";
            }
        } else {
            echo "上传出错,错误代码:" . $file_error;
        }
    } else {
        echo "不允许的文件扩展名";
    }
} 
?> 
</body> 
</html>

额外提示:避免同名文件覆盖

上面的修改会直接使用原文件名,但如果有用户上传同名文件,新文件会覆盖旧文件。如果想避免这个问题,可以给原文件名加个唯一标识(比如时间戳),示例代码如下:

// 保留原文件名主体,添加时间戳避免覆盖
$file_base_name = pathinfo($file_name, PATHINFO_FILENAME);
$file_name_new = $file_base_name . '_' . time() . '.' . $file_ext;
$file_destination = './files/' . $file_name_new;

这样既保留了原文件名的辨识度,又不会因为重名丢失旧文件。

另外,你提到想要搭建支持任意扩展名文件的服务,当前代码里的$allowed数组只允许txt和jpg,你可以把这个数组改成空数组,或者直接移除in_array的检查逻辑,比如:

// 移除扩展名限制,允许所有类型文件上传
// $allowed = array('txt', 'jpg'); 
// if(in_array($file_ext, $allowed)) { 
if(true) { // 替换成这个判断,或者直接删除整个if块

内容的提问来源于stack exchange,提问作者Dr Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:00