Reputation: 1401
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.
Upvotes: 6
Views: 4508
Reputation: 2762
you can also use overwrite as an option like this:
$options = array(
'overwrite' => $overwrite
);
$upload_handler = new UploadHandler($options);
in UploadHandler.php : add the default parameter
function __construct($options = null,...){
...
'overwrite' => false,
...
}
then replace get_file_name() function by
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);
if($this->options['overwrite'])
return $name;
else
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
);
}
regards
Upvotes: 0
Reputation: 11031
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.
Upvotes: 9
Reputation: 5947
Use this custom function in file index.php require UploadHandler.php
protected function trim_file_name($file_path, $name, $size, $type, $error,
$index, $content_range) {
// Remove path information and dots around the filename, to prevent uploading
// into different directories or replacing hidden system files.
// Also remove control characters and spaces (\x00..\x20) around the filename:
$name = trim(basename(stripslashes(unique_custom_file_name)), ".\x00..\x20");
// Use a timestamp for empty filenames:
if (!$name) {
$name = str_replace('.', '-', microtime(true));
}
return $name;
}
Upvotes: 0