Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery File Upload by bluimp, how to replace instead of renaming

Tags:

jquery

php

upload

First of all the jQuery plugin can be found here:

https://github.com/blueimp/jQuery-File-Upload

I'm using the PHP-version of the script and I'm trying to replace images that has the same name instead of renaming them.

I think I've found the functions that do the renaming, but the edits I tried do not work.

  protected function upcount_name_callback($matches) {
        $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1;
        $ext = isset($matches[2]) ? $matches[2] : '';
        return ' ('.$index.')'.$ext;
    }

    protected function upcount_name($name) {
        return preg_replace_callback(
            '/(?:(?: \(([\d]+)\))?(\.[^.]+))?$/',
            array($this, 'upcount_name_callback'),
            $name,
            1
        );
    }

Any suggestions? I've searched for this all over the place but to no avail.

Link to the php class that does the upload: https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/upload.class.php

Any suggestions?

Edit:

I've tried to just return null on these functions, but that just hangs the script, probably because it doesn't know what to do if the filename is the same.

like image 937
Albin N Avatar asked Oct 15 '12 12:10

Albin N


1 Answers

You can alter their PHP server side script to have files overwritten instead of creating a new unique filename. Just alter upload handler class function get_file_name:

Original function:

 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);
    return $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
    );
}

alter it to this:

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);
        return $name;
    }

This way existing file will get overwritten if the uploaded file-name is same as the existing file on your server.

like image 195
Primoz Rome Avatar answered Oct 24 '22 01:10

Primoz Rome