Как сделать так имя файла 31f3207.jpeg

Возможный дубликат:
Создание уникального ключа

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

Я загружаю файл изображения с ‹input type =" file "/>. Файл имеет имя picture_1.jpg. Но я бы хотел сохранить его в файловой системе с таким именем ec0b4c5173809b6aa534631f3207.jpg? Как создаются такие новые имена? Используется ли какой-то специальный скрипт / генератор для создания таких имен?

Например картинка в FB: http:// a3.sphotos.ak.fbcdn.net/hphotos-ak-snc6/190074_10150167009837952_8062627951_8311631_4439729_n.jpg.

Имя ему 190074_10150167009837952_8062627951_8311631_4439729_n.jpg. Но оригинальное название точно было другим. Поэтому я бы хотел таким же образом изменить имя загруженного файла. Как это возможно?


person Green    schedule 24.12.2011    source источник
comment
Ваш вопрос очень неконкретный. Было бы полезно предоставить дополнительную информацию и перефразировать свой вопрос, например: Я хочу выполнить XYZ и отслеживать загруженные файлы. Но я не знаю как, потому что, если я загружаю файл с заданным именем, имена меняются при хранении на сервере. Я использую XYZ как CMS / WebFramework, и я предоставил короткий журнал / расшифровку ниже: ...   -  person Don Question    schedule 25.12.2011


Ответы (5)


В PHP я использую uniqid () для именования файлов, которые я сохраняю из загрузок.

Если вам нужен очень длинный или, казалось бы, более случайный идентификатор, вы можете sha1 () или md5 () uniqid для создания хеша.

Конечно, вы также можете использовать эти два метода для создания хеша имени файла.

Например, следующий код можно использовать для создания нового имени для файла.

$file = 'somefile.jpg';
$new_name = uniqid();
$new_name .= '.'.pathinfo($file,PATHINFO_EXTENSION);
person Alex Coplan    schedule 24.12.2011

Вы не упомянули, какой язык программирования используете.

в PHP это загадочное имя и исходное имя файла можно найти в массиве $_FILES.

предположим, что имя элемента вашей формы - это файл пользователя, это загадочное имя можно получить из basename($_FILES['userfile']['tmp_name']), а исходное имя - из basename($_FILES['userfile']['name'])

Посетите здесь для получения дополнительной информации: http://www.php.net/manual/en/features.file-upload.post-method.php

person Remo Harsono    schedule 24.12.2011

Вы могли бы использовать MD5 имя, чтобы создать строку без пробелов и точек: md5($filename) (http://php.net/md5), хотя я не уверен, что это то, о чем вы спрашивали?

Изменить: вы также можете использовать uniqid() (http://php.net/manual/en/function.uniqid.php)

person powerbuoy    schedule 24.12.2011
comment
В некоторых ситуациях это было бы хорошим подходом; однако, если два изображения имеют одинаковое локальное имя файла (но загружены, например, разными пользователями), это будет проблематично. Я думаю, что OP ищет функцию для создания уникальных имен файлов на сервере, независимо от их исходного, локального имени файла. - person Logan Serman; 25.12.2011
comment
Что произойдет, если один пользователь загрузит картинку с именем me.jpg, а другой загрузит другую картинку с тем же именем? Конечно, можно использовать md5, но не так. - person Bakudan; 25.12.2011
comment
Я не был уверен, нужен ли ему метод создания безопасных имен файлов или способ создания уникальных, поэтому я отредактировал ответ. Если вы действительно использовали md5(), вам, очевидно, нужно убедиться, что они еще не используются. - person powerbuoy; 25.12.2011

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

move_uploaded_file($_FILES['userfile']['tmp_name'], $filePN)

Где & filePN - это путь и имя, куда вы хотите переместить файл.

однако специальный скрипт, о котором вы говорите, может быть множеством вещей из хеша MD5 входных данных. имя на увеличиваемое число для предотвращения перезаписи.

person Kodlee Yin    schedule 24.12.2011

Похоже на GUID.

Если вы программист ASP.NET, используйте что-то вроде этого:

string filename = new Guid().ToString() + ".jpg";
person savraska    schedule 24.12.2011