Подтвердить что ты не робот

"Загрузка файла Blueimp jQuery" переименовывает файлы

Я использую инструмент загрузки файла Blueimp jQuery. Я бы хотел полностью переименовать файлы по мере их загрузки. Поскольку фотографии добавляются в уникальный каталог на основе идентификатора пользователя, я бы просто хотел добавить фотографии с именами 001.jpg, 002.jpg, 003.jpg и т.д. Как я могу это сделать (либо путем изменения UploadHandler. php или index.php?

В index.php(код ниже в настоящее время изменяет каталог загрузки):

$userID = 'user005'; //hardcoded in this example
$options = array('upload_dir'=>'files/'.$userID.'/', 'upload_url'=>'files/'.$userID.'/');
$upload_handler = new UploadHandler($options);
4b9b3361

Ответ 1

Старый пост, но когда я искал то же самое сегодня, я отправляю свое решение, надеясь, что это поможет кому-то.

Я отредактировал файл 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;
            }


            protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
                    $index = null, $content_range = null) {
                $file = new \stdClass();

                //MYEDIT to generate unique filename
                $file->name = $this->generate_unique_filename($name);

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

                //...
}

Ответ 2

Почему бы не попробовать uniqid() создать уникальное имя?

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

        if ( $extension != "" )
        {
            $extension = "." . $extension;
        }
    }
    return md5( uniqid() ) . $extension;
    //or simply return uniqid() . $extension;
}       

Ответ 3

Для тех, у кого только есть name через $options:

Заменить (строка 1056?)

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

с

$extension = pathinfo($name , PATHINFO_EXTENSION);
if ( $extension != "" ){
    $extension = "." . $extension;
}

$file->name = (isset($this->options['filename']) && isset($extension) ) 
     ? $this->options['filename'] . $extension
     : $this->get_file_name($uploaded_file, $name, $size, $type, $error, $index, $content_range);

Затем укажите имя в опции:

$upload_handler = new UploadHandler(array(['filename' => 'whatever' ]));

Ответ 4

Спасибо за это!

Но у меня возникла проблема, я хотел бы переименовать с названием поля, я попытаюсь использовать это:

protected function handle_form_data($file, $index) {
    $file->title = @$_REQUEST['title'][$index];
}
protected function generate_unique_filename($filename = "") {
    $extension = "";
    if ( $filename != "" )
    {
        $extension = pathinfo( $filename, PATHINFO_EXTENSION );
        if ( $extension != "" ) {
            $extension = "." . $extension;
        }
    }
    return $file->title . $extension;
}

Но я каждый раз получал ошибку JSON... (@$_ REQUEST ['title'] [$ index], хорошо работать, я использую его для сохранения в моей базе данных)

Ответ 5

отредактируйте переменную $name в классе UploadHandler, чтобы получить уникальное имя файла. См. Код

protected function get_file_name($file_path, $name, $size, $type, $error,$index,$content_range)

Ответ 6

Для загрузки нескольких файлов, я добавляю несколько строк из SananTheBest, как показано ниже. На самом деле, файлы причин не могут загружаться, потому что имя файла одинаково даже с использованием даты, указанной в его предыдущем сообщении. (Спасибо вам)

protected function generate_unique_filename($filename = "")
{

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

        if ( $extension != "" )
        {
            $extension = "." . $extension;
        }
    }
    //$filenamegen = date('ymdHis').generateRandomString();
    $characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $charactersLength = strlen($characters);
    $randomString = "";
    for ($i = 0; $i < 5 ; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }


    //$filenamerandom=$filename.".jpg";
    //return md5(date('Y-m-d H:i:s:u')). $extension;

    return date('ymdHis').$randomString . $extension ;
}

Ответ 7

get_file_name метод - это то, где происходит фактическое именование. Чтобы избежать многих обходных решений и просто ударить ноготь по голове, отредактируйте его следующим образом:

protected function get_file_name($file_path, $name, $size, $type, $error,
        $index, $content_range) {
    $name = $this->trim_file_name($file_path, $name, $size, $type, $error,
        $index, $content_range);
    //don't return this right away; parse it to a variable
    $unique_file_name = $this->get_unique_filename(
        $file_path,
        $this->fix_file_extension($file_path, $name, $size, $type, $error,
            $index, $content_range),
        $size,
        $type,
        $error,
        $index,
        $content_range
    );
    //generate your custom name here
    $custom_name = uniqid('profilepic');
    //extract file extension
    $file_extension = pathinfo($unique_file_name, PATHINFO_EXTENSION);
    return $custom_name.'.'.$file_extension;
}