“Blueimp jQuery文件上传”重命名文件

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

老post,但是当我今天搜索同样的东西时,我发布我的解决方案,希望它会帮助某人。

我用这种方式编辑了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('Ymd 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); //... } 

对于那些只通过$options提供name的人:

替换(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' ])); 

为什么不尝试使用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; } 

感谢那 !

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

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

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

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

对于多个文件下载,我从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('Ymd H:i:s:u')). $extension; return date('ymdHis').$randomString . $extension ; } 

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