1

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

<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'并在数字字段中插入'file_name'。然后我想让它发送 'file_name.pdf' 到实际的 'upload_file.php' 脚本。

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

4

5 回答 5

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它们来摆脱它们,只留下字母、数字和破折号自己。

于 2013-11-12T04:54:21.327 回答
1

FormData在使用接口发送 POST 请求之前更改文件名:

var file = $('#image-file').get(0).files[0];
var newFileName = file.name + "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
});

下面是保存文件的 PHP 代码:

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

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

于 2017-10-23T08:34:54.727 回答
0

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

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

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

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

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

于 2013-11-12T04:57:08.403 回答
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);
于 2013-11-12T05:20:54.297 回答
0

你可以这样做

if(move_uploaded_files($tmp_name,$location.'number,pdf')) {
    echo "uploaded!!";
}
于 2013-11-12T04:52:18.310 回答