Php загрузка файла переименовать

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

У меня есть эта форма, которая позволяет пользователю загружать файл с файлом ‘.pdf’ и загружать его на сервер. Однако я хотел бы переименовать файл в имя файла, выбранного в поле “Число”. Как мне это сделать?

Например… Пользователь выбирает файл test.pdf и вставляет ‘file_name’ в поле Number. Я хочу, чтобы он отправил ‘file_name.pdf’ в фактический сценарий ‘upload_file.php’.

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

$_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 >

Вероятно, вы захотите выполнить некоторые тесты символов в поле, чтобы убедиться, что кто-то не вводит [email protected]#$%^&*( т.д.) Я бы использовал str_replace чтобы избавиться от них и оставить только буквы, цифры и рушится.

if(move_uploaded_files($tmp_name,$location.'number,pdf'))

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

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

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

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

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

Я не думаю, что вы можете использовать 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); 

Измените имя файла перед отправкой почтового запроса:

 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 Чтобы сохранить файл:

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

Источник

Как изменить имя файла при загрузке?

необходимо при загрузке файла на сервер изменить имя файла. например есть изображение image.jpg надо что бы при загрузке изменилось на idпользователя_item_image.jpg
вот код для загрузки файла на сервер

  function upload($filename, $pach) < $idUser=JUserHelper::getProfile()->id; // устанавливаем директорию загрузки файла $uploadfile = $pach.basename($_FILES[$filename]['name']); if(!empty($filename)) < // Ограничения размера загружаемого файла if($_FILES[$filename]['size'] >1024*2*1024) < return("Размер файла превышает 2 мегабайта"); >// Проверяем загружен ли файл if(is_uploaded_file($_FILES[$filename]['tmp_name'])) < // Если файл загружен успешно, перемещаем его // из временной директории в конечную if(copy($_FILES[$filename]['tmp_name'],$uploadfile)) < return("OK! Файл успешно загружен."); >else < return(''/*. $_FILES[$filename]['tmp_name'].$pach */.$_FILES[$filename]['name'].' - не является правильно загруженным файлом или не может быть перемещён из временной директории.'); > > else < switch($_FILES[$filename]['error']) < case 1: echo "Размер файла превышает допустимый."; break; case 2: echo "Размер файла превышает допустимый."; break; case 3: echo "Загружаемый файл был получен только частично."; break; case 4: echo "Файл не был загружен!"; break; >> > else < return('Не указан файл для загрузки!'); >> ?> ?>

Ivanq

if(copy($_FILES[$filename]['tmp_name'], "myid_or_something_else_$uploadfile")) return("OK! Файл успешно загружен.");

т.е. для джумлы актуально будет
$idUser=JUserHelper::getProfile()->id;
if(copy($_FILES[$filename][‘tmp_name’], «$idUser_item_$uploadfile»))
return(«OK! Файл успешно загружен.»);

Ivanq

Ivanq: // устанавливаем директорию загрузки файла
$uploadfile = $pach.basename($_FILES[$filename][‘name’]);

Источник

Как переименовать файл, если такой файл есть при загрузке?

Здравствуйте. Загружаю файл и проверяю, есть ли такой файл:

$filename = "upload/".$_FILES["filename"]["name"]; if (file_exists($filename)) < echo "Файл $filename существует"; move_uploaded_file($_FILES["filename"]["tmp_name"], "upload/".$_FILES["filename"]["name"]); >

Подскажите, как дописать хоть куда-нибудь в название файла «+1»?
Чтобы, если файл называется good.jpg — закачался бы файл 1good.jpg или good1.jpg
Если файл 1good.jpg есть — закачался бы файл 2good.jpg и т.д.
То есть, чтобы работало по принципу «новая папка 1», «новая папка 2»

RomaZveR

Это совершенно небезопасный и непонятно зачем нужный велосипед. Генерируйте наименования загружаемых файлов сами, строго следите за расширением.

$valid_formats = [ 'jpg', 'jpeg', 'png', 'gif', 'bmp' ]; $ext = pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION); if (!isset($valid_formats[$ext])) < return 'error'; >$filename = md5($_FILES['filename']['name'].uniqid()). '.' .$ext; if (!is_file('upload/'.$filename)) < move_uploaded_file($_FILES['filename']['tmp_name'], 'upload/'.$filename); >

1) Получить название файла
2) Записать в переменную, отбросив расширение «.jpg», только делайте внимательно, чтобы отбрасывало именно разрешение, а не так, чтобы у вас файл kartinka.leto.bmp и вы отбросили .leto.bmp
3) Если приписанного числа нет, то добавить в конце 1, если изначально file1.bmp, то отрезать единицу (или любое другое число), прибавить к ней +1 и подписать обратно
4) Приклеить обратно расширение
5) .
6) PROFIT!
P>S> В 3 пункте, добавляйте через _1, чтобы проще было улавливать разницу между названием файла и его копией, чтобы получалось file.bmp file1.bmp, file_1.bmp file1_1.bmp чтобы видеть разницу между ними

qqignatqq, на сколько мне известно, нет в пхп функции, которая сама разбирает, переименовывает и собирает имя файла обратно по шаблону

Мне не важно, где именно он пропишет цифру. Главное, чтобы в расширение он её не писал. Пусть будет «1 новая папка», «2 новая папка». Этого он тоже не может?

qqignatqq,
$NewFilename = ‘1_’ . $Filename

Но при повторной загрузке файла в 5ый или 6ой раз, вы об этом не узнаете, если вы хотите, чтобы было видно все загрузки, то надо писать проверку имени файла, при наличии 1_file улавливать число перед именем, брать его, ++1, и отдавать имя.
Это не костыли, это грамотно реализованные функции. При этом не забывайте делать проверку, чтобы в форму загрузки вам не записали и не отправили чего лишнего, в виде исполняемого файла с вредоносным кодом

Источник

Как переименовать файл из input?

Как переименовать файл из input перед отправкой на сервер?

с помощью $_FILES я могу получить инфу про файл. Но как мне переименовать его до того как я его отправлю на сервер?

DevMan

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

DevMan

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

Есть 3 способа. Один правильный и 2 неправильных.

Первый способ (правильный) — это переименовать полученный файл непосредственно в php-обработчике.

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

Третий способ, подменять файл на лету непосредственно в поле выбора файла:

document.querySelector('input[type="file"]').addEventListener('change', function() < if (this.files.length >0) < var file_name = 'Новое название.jpg'; if (this.files[0].name !== file_name) < var new_file = new File([this.files[0]], file_name, ); new_file.name = file_name; var dt = new DataTransfer(); dt.items.add(new_file); this.files = dt.files; > > >);

Думаю вполне понятно, что 2 последних способа неправильные. Да, они буду работать, но так обычно не делают.

Источник

Читайте также:  Python finding files in directory
Оцените статью