如何在发送到upload_file.php之前更改文件名?

时间:2013-11-12 04:48:33

标签: php html file upload

我这里有这个表单,允许用户上传带有'.pdf'的文件并将其上传到服务器。但是,我想将文件重命名为“Number”字段中选择的文件名。我该怎么做呢?

<form action="upload_file.php" method="post"
 enctype="multipart/form-data">
   Filename:<input type="file" name="file" id="file"><br>
   Number:<input type="text" name="number" id="number" />
   <br />
   <br />
   <input type="submit" name="submit" value="Submit">
</form>

例如....用户选择文件'test.pdf'并在Number字段中插入'file_name'。我想让它将'file_name.pdf'发送到实际的'upload_file.php'脚本。

任何指导都会有所帮助, 感谢

5 个答案:

答案 0 :(得分:3)

$_FILES超全局数组包含有关文件上传的所有必需信息,因此当您上传文件时,$_POST['number'] . '.pdf'代替name属性:

$upload_path = '/your/upload/location/' . $_POST['number'] . '.pdf';

if(move_uploaded_file($_FILES['file']['tmp_name'], $upload_path)) {
    // success
}

您可能希望对该字段进行一些字符测试,以确保某人不输入~!@#$%^&*(等...我会使用str_replace删除它们并仅留下字母,数字和破折号。

答案 1 :(得分:0)

你可以这样做

if(move_uploaded_files($tmp_name,$location.'number,pdf')) {
    echo "uploaded!!";
}

答案 2 :(得分:0)

首先,您必须意识到当PHP接受上传文件时,它会自动为其提供临时名称并将其存储在系统的临时目录中。因此,在上传文件后,您必须检索它的当前实际位置。

$tmpFile = $_FILES["file"]["tmp_name"];

从这里开始,您可以使用move_uploaded_file功能将其存储在您想要的位置,并使用您想要的最终文件名。所以在你的情况下,它看起来像这样。

move_uploaded_file($tmpFile, '/path/to/uploads/directory/' . $_POST['number'] . '.pdf');

您当然希望在执行此操作之前进行验证。

答案 3 :(得分:0)

我认为你不能在上传之前使用javascript或客户端代码重命名。上传UI元素 行为完全由浏览器控制,除非您自己编写自定义上传控件。

但是,您可以实现在服务器端重命名上传文件的相同目标。

$destDir = '/var/www/';   //can be any directory on your server, writeable by webserver

$renamedFilename = $_POST['number']; 
//keep the same file extension if uploaded file has it
$renamedFilename .= ($pos = strrpos($_FILES['file']['name'], '.')) === false ? '' : substr($_FILES['file']['name'], $pos);

move_uploaded_file($_FILES["file"]["tmp_name"], $destDir . DIRECTORY_SEPARATOR . $renamedFilename);

答案 4 :(得分:0)

在发送帖子请求之前更改文件名:

            var file = $('#image-file').get(0).files[0];
            var newFileName = file.filename + "newName";
            var formData = new FormData();
            formData.append('file', file, newFileName);


            $.ajax({
                url: upload.php, // get the upload URL for the server
                success: function(fileData) {
                   ...

                },
                error: function(e) {
                    ...
                },
                // Form data
                data: formData,
                type: 'POST',
                cache: false,
                contentType: false,
                processData: false
            });
            return false;
        });

PHP代码保存文件:

 <?php
    $targetfile = $_FILES['file']['name'];
    move_uploaded_file($_FILES['file']['tmp_name'], $targetfile);
 ?>

注意:PHP中的默认发布内容长度设置为8M,可以在php.ini中更改