简体   繁体   中英

“Blueimp jQuery File Upload” rename files

I'm using the Blueimp jQuery file upload tool. I'd like to completely rename the files as they're uploaded. Since photos are being added to a unique directory based on the userID, I'd really just like to add photos with names 001.jpg, 002.jpg, 003.jpg, etc. How can I accomplish this (either by modifying UploadHandler.php or index.php?

In index.php (code below currently changes the upload directory):

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

Old post, but as I was searching the same thing today, I post my solution hoping it will help someone.

I edited the UploadHandler.php file in this way:

        //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);

                //...
}

For those who only what to give the name through the $options :

Replace (line 1056?)

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

with

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

Then give the name in the option like this:

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

Why not trying uniqid() to generate an unique name?

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;
}       

Thanks for that !

But I got a problem, I would like to rename with a field title, I've try to use that :

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;
}

But I got a JSON error everytime... (The @$_REQUEST['title'][$index]; work well, I use it for save it in my database)

edit the $name variable in UploadHandler class to get the unique file name. See the code

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

For multiple files download, I add some lines from SananTheBest as following. Actually, The reason files can not upload because the files name are same even using date as mentioned in his pervious post. (Thanks you)

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 ;
}

get_file_name method is where the actual naming occurs. In order to avoid much workarounds and just hit the nail on the head, edit it as follows:

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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM