在Wordpress后端上传期间重命名文件

时间:2010-07-15 20:21:52

标签: wordpress plugins file-rename

有没有办法在Wordpress 3.0后端的上传过程中重命名文件?我想对文件进行一致的命名,特别是对于图像。

我认为原始文件名的12(+ - )数字哈希值或类似的东西会很棒。有什么建议吗?

此致

6 个答案:

答案 0 :(得分:28)

  

但在上传文件之前,这样做会更容易。

不太确定 - 这似乎相当容易;

/**
 * @link http://stackoverflow.com/a/3261107/247223
 */
function so_3261107_hash_filename( $filename ) {
    $info = pathinfo( $filename );
    $ext  = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
    $name = basename( $filename, $ext );

    return md5( $name ) . $ext;
}

add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );

此过滤器创建原始文件名的32个字符的哈希值,保留文件扩展名。如果你愿意,你可以使用substr()将它砍掉一点。

一旦文件上传到服务器上的临时目录,但在调整大小(如果适用)并保存到上传文件夹之前,此过滤器就会运行。

请注意,不存在文件覆盖的风险 - 如果新散列的文件与已存在的文件相同,WordPress将尝试在文件名后附加一个递增的数字,直到不再发生冲突为止。

WordPress插件

<?php

/**
 * Plugin Name: Hash Upload Filename
 * Plugin URI:  http://stackoverflow.com/questions/3259696
 * Description: Rename uploaded files as the hash of their original.
 * Version:     0.1
 */

/**
 * Filter {@see sanitize_file_name()} and return an MD5 hash.
 *
 * @param  string $filename
 * @return string
 */
function so_3261107_hash_filename( $filename ) {
    $info = pathinfo( $filename );
    $ext  = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
    $name = basename( $filename, $ext );

    return md5( $name ) . $ext;
}

add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );

答案 1 :(得分:4)

我为它制作了一个插件。我这样做是因为我在尝试上传带有特殊字符的图片时遇到了太多麻烦

http://wordpress.org/plugins/file-renaming-on-upload

答案 2 :(得分:3)

我实现了同样的东西,我想要一个比原来更随机的文件名,因为我使用它的网站仅用于图片而且所有文件都在一个目录中。

我做了以下

return md5($ip . uniqid(mt_rand(), true)) . $ext;

答案 3 :(得分:2)

我真的在寻找能够正确完成它的插件,最后我自己制作了这个插件。它可以在我的博客上找到:http://www.meow.fr/media-file-renamer!如果您使用它,请给我一个反馈:)我真诚地希望它有所帮助!

答案 4 :(得分:2)

http://wpapi.com/change-image-name-to-wordpress-post-slug-during-upload/

BTW:

sanitize_file_name添加过滤器是完全错误的,因为sanitize_file_name()函数是格式化字符串的辅助函数,它可能在其他地方使用,如插件或主题。

function wp_modify_uploaded_file_names($file) {
    $info = pathinfo($file['name']);
    $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($file['name'], $ext);

    $file['name'] = uniqid() . $ext; // uniqid method
    // $file['name'] = md5($name) . $ext; // md5 method
    // $file['name'] = base64_encode($name) . $ext; // base64 method

    return $file;
}

add_filter('wp_handle_upload_prefilter', 'wp_modify_uploaded_file_names', 1, 1);

答案 5 :(得分:0)

您无法使用媒体库功能自动重命名文件。我建议在上传之前重命名文件。即使在上传文件后,您也无法通过WordPress重命名它,只能通过FTP重命名。

这样做的唯一方法是将自己挂钩到媒体库上传过程中的插件。但在上传文件之前,这样做会更容易。