" Blueimp jQuery文件上传"重命名文件

时间:2014-03-12 16:43:46

标签: php jquery

我正在使用Blueimp jQuery文件上传工具。我想在文件重新上传时完全重命名这些文件。由于照片是基于用户ID添加到唯一目录的,我真的只想添加名称为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);

7 个答案:

答案 0 :(得分:25)

旧帖子,但是当我今天搜索相同的内容时,我发布了我的解决方案,希望它可以帮助某人。

我用这种方式编辑了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);

                //...
}

答案 1 :(得分:2)

对于那些只通过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' ]));

答案 2 :(得分:1)

为什么不尝试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 :(得分:1)

谢谢!

但我遇到了问题,我想用字段标题重命名,我试着用它:

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];效果很好,我用它来保存在我的数据库中)

答案 4 :(得分:0)

编辑$name类中的UploadHandler变量以获取唯一的文件名。见代码

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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