Как получить уникальное имя для каждого загруженного файла с помощью uploadify - PullRequest
2 голосов
/ 09 октября 2011

Я загружаю файлы с помощью плагина jQuery uploadify.Все файлы загружаются в один каталог.Когда я пытаюсь загрузить файл дважды, выдается следующая ошибка:

filename.gif (4.3KB) - IO Error

Я хочу загружать файл с уникальным именем каждый разЕсть много других пользователей, загружающих файлы в тот же каталог.Таким образом, существует вероятность того, что два пользователя имеют одинаковое имя файла.Как можно избежать перезаписи.

Мой код:

$('.SingleFileUpload').uploadify({
        'uploader'  : '/uploadify/uploadify.swf',
        'script'    : '/uploadify/uploadify.php',
        'cancelImg' : '/uploadify/cancel.png',
        'folder'    : '/uploads',
        'auto'      : true,
        'queueID'   : 'fileQueue',
        'removeCompleted':false,
        'onComplete'  : function(event, ID, fileObj, response, data) {
                            $(event.target).closest('form').append( '<input type="hidden" name="uploaded_file" value="' + response + '">' );
                        }
      });

Ответы [ 3 ]

3 голосов
/ 09 октября 2011

Для начала отклоните дубликаты имен файлов:

$targetFolder = '/uploads'; // Relative to the root

if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
    $targetFile = rtrim($targetPath,'/') . $_FILES['Filedata']['name'];

    // Validate the file type
    $fileTypes = array('jpg','jpeg','gif','png'); // File extensions
    $fileParts = pathinfo($_FILES['Filedata']['name']);

    if (in_array($fileParts['extension'],$fileTypes)) {
        if (file_exists($targetFile)){
            echo 'File does already exist, choose another name!';
        }
        else {
            move_uploaded_file($tempFile,$targetFile);
            echo '1';
        }
    } else {
        echo 'Invalid file type.';
    }
}
?>

Вы можете использовать префикс всех имен файлов по идентификатору пользователя + знак подчеркивания (или любой символ, чтобы отделить идентификатор от имени файла, чтобы избежать UID1 + 2file == UID12 + file.

Вместо того, чтобы заставлять пользователя выбирать другое имя, вы также можете реализовать автоматическое изменение имени: либо путем добавления префикса и / или постфикса, либо путем вычисления хэша файла. Последняя опция также предотвращает появление дубликатов файлов (с одинаковыми именами и содержимым) на сервере.

2 голосов
/ 09 октября 2011

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

1 голос
/ 28 марта 2012

Я дублирую имя файла и добавляю copynr в конце.например: имя файла (2) имя файла (3) имя файла (4) и т. д.

$('#upload').uploadify({
        'uploader'       : 'resources/plugins/uploadify/uploadify.swf',
        'script'         : 'resources/plugins/uploadify/uploadify.php',
        'cancelImg'      : 'resources/plugins/uploadify/cancel.png',
        'folder'         : 'uploads/',
        'auto'           : true,
        'multi'          : false,
        'fileDesc'       : '*.jpg;*.jpeg;*.png;*.gif;',
        'fileExt'        : '*.jpg;*.jpeg;*.png;*.gif;',
        onComplete: function (evt, queueID, fileObj, response, data){
            alert(response); // = uploaded filename
        }

только часть uploadify JS (без использования метода check!)

НТН

...