Как мне изменить имя файла перед отправкой на upload_file.php?

0

У меня есть эта форма, которая позволяет пользователю загружать файл с файлом '.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' в поле Number. Я хочу, чтобы он отправил 'file_name.pdf' в фактический сценарий 'upload_file.php'.

Любое руководство поможет, спасибо

  • 0
    На самом деле имя файла не имеет значения, файл загружается в двоичном формате с именем файла в качестве дополнительных данных. Это скрипт «upload_file.php», который управляет окончательным именем файла. Вы можете загрузить файл 1234567890.pdf, но, например, upload_file.php может сохранить его как abcde.pdf, без каких-либо проблем. Читайте о PHP-функции move_uploaded_file() .
Теги:
file
upload

5 ответов

2

$_FILES массив $_FILES содержит всю необходимую информацию о загрузке вашего файла, поэтому, когда вы загружаете файл, $_POST['number']. '.pdf' $_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 чтобы избавиться от них и оставить только буквы, цифры и рушится.

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);
 ?>

Примечание: длина сообщения по умолчанию для 8M в PHP может быть изменена в php.ini

0

Я не думаю, что вы можете использовать javascript или клиентский код для переименования непосредственно перед загрузкой. Загрузка поведения элемента пользовательского интерфейса полностью контролируется браузером, если вы не создадите собственный пользовательский элемент управления загрузкой.

Однако вы можете достичь той же цели, что и переименование загруженного файла на стороне сервера.

$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);
0

Вы можете сделать это

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

Сначала вы должны понимать, что, когда PHP принимает загруженный файл, он автоматически присваивает ему временное имя и сохраняет его в системном временном каталоге. Поэтому после загрузки файла вам необходимо получить текущее фактическое местоположение.

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

Отсюда вы можете использовать функцию move_uploaded_file, чтобы сохранить ее там, где хотите, и с конечным именем файла, который вы хотите. Так что в вашем случае это будет выглядеть примерно так.

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

Вы, конечно же, захотите сделать свою проверку, прежде чем делать это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню