JQuery BlueImp, как изменить имя файла перед загрузкой?

Можно ли изменить имя файла, загружаемого через jquery blueimp?


person tom_cruz    schedule 04.11.2014    source источник


Ответы (5)


require('UploadHandler.php');
class CustomUploadHandler extends UploadHandler {
    protected function trim_file_name($file_path, $name, $size, $type, $error, $index, $content_range) {
            $name = 'First_' . microtime(true);
            $name = str_replace('.', '', $name);
            return $name;
        }
}

$upload_handler = new CustomUploadHandler();

В вашем пользовательском файле index.php инициализируйте эту функцию UploadHandler.php

person Vladimir Salguero    schedule 17.11.2014
comment
хорошее решение без взлома. Спасибо! в вашем решении была опечатка, я отредактирую ее, чтобы исправить. - person Dan Mantyla; 05.08.2015
comment
Да! Большое спасибо - person Vladimir Salguero; 27.09.2018
comment
+1 ... но решение без взлома? он перезаписывает функцию обрезки, чтобы изменить имя файла? мех. Это самое не взломанное решение из доступных. - person Toskan; 30.10.2018

Этого можно добиться, только изменив функцию trim_file_name() на следующую в файле UploadHandler.php.

protected function trim_file_name(VARIABLES) {
    $name = uniqid();
    return $name;
}

и это все

person Saymon    schedule 11.05.2015
comment
Откуда вызывается trim_file_name? Мне нужно отправить переменную «имя», но я не могу найти способ ее отправить. - person Claudio; 22.09.2017

Вот клиентское решение для BlueImp. Он использует обратный вызов "добавить" BlueImp. Мой пример удалит запятые из имени файла.

$('#fileupload').fileupload({
    add: function (e, data) {
        $.each(data.files, function (index, file) {
            //set new name here
            var newname = data.files[index].name.replace(",", "");
            Object.defineProperty(data.files[index], 'name', {
                value: newname
            });
        });
        $.blueimp.fileupload.prototype.options.add.call(this, e, data);
    }
})
person Maave    schedule 10.04.2019
comment
Это единственное решение на стороне клиента, которое действительно работает. Кстати, этот код заменяет только первую запятую. Вы, вероятно, хотите .replace(/,/g, '') или .split(',').join('') - person bendytree; 18.01.2020

Свойство name объектов File доступно только для чтения, но в качестве свойства uploadName для каждого отдельного файла может быть указано альтернативное имя.

Можно использовать обратный вызов

$('#fileupload').fileupload
  submit: (e, data) ->
    data.files[0].uploadName = 'newname'

Если ваши data.files содержат все файлы за один раз, вы можете перебирать их.

person 150Years    schedule 18.04.2020

Это решение было опубликовано пользователем lethal.industry здесь. Вы должны вставить этот код внутри класса UploadHandler в файле UploadHandler.php.

   //custom function which generates a unique filename based on current time
    protected function generate_unique_filename($filename = "")
        {

            $extension = "";
            if ( $filename != "" )
            {
                $extension = pathinfo($filename , PATHINFO_EXTENSION);

                if ( $extension != "" )
                {
                    $extension = "." . $extension;
                }
            }

            return md5(date('Y-m-d H:i:s:u')) . $extension;
        }

Вы можете изменить имя файла по своему усмотрению, изменив последнюю строку «return...»

Затем вы ищете функцию «handle_file_upload» в UploadHandler.php и заменяете эту строку

$file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error, $index, $content_range);

для этой строки

$file->name = $this->generate_unique_filename($name);
person danteinzu    schedule 30.04.2015
comment
Этот метод не работает с активированным несколькими файлами, он работает нормально только при загрузке одного файла. Проверьте мой ответ ниже, чтобы узнать простой способ добиться этого. - person Saymon; 12.05.2015