我这里有这个表单,允许用户上传带有'.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'脚本。
任何指导都会有所帮助, 感谢
答案 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中更改