使用随机名称将图像保存到数据库中

时间:2012-06-05 14:04:36

标签: php javascript jquery html postgresql

早上好,我一直试图解决这个问题,但是我必须承认我在编程方面有一些新的东西。

实际上我正在创建一个新闻网站,并且对于新闻管理我有一个小问题,我想要,当我点击保存图片时它得到一个随机名称,而不是它从用户文件中得到的名称,例如: pic.jpg保存为2613.jpg。

我试图这样做以防止如果有2个相同名称的图片新的替换旧的,我已经尝试使用javascript,php但我无法解决我的问题,希望你们可以帮助我顺便说一句,我正在使用javascript,php,postgresql,jquery和ajax,如果你需要更多细节请告诉我,并再次希望我能从这个社区得到一些帮助。

function guardar(){
if($('#titl').val() == '' || $('#categ').val() == '' || $('#cont').val()==''){
            alert("Todos los campos deben contener datos!");
            return false;
        }

        $.ajax({
            url: "noticias_php.php",
            data:{
                n : rand(),
                "accion" : "guardar",
                ID     : $('#id').val(),
                Titulo : $('#titl').val(),
                Categorias : $('#categ').val(),
                Contenido : $('#cont').val(),
                fecha: $('#fecha').val(),
                imagen: $('#img_id').val()

            },
            success: function(datos){
                var respuesta = explode("-*", datos);

                        if (respuesta[0] == "SI"){
                            aviso(respuesta[1]);
                            limpiar();
                        }else if (respuesta[0] == "NO"){
                            aviso(respuesta[1]);
                        }else{
                            aviso(datos);
                        }
            }
        });
    }

4 个答案:

答案 0 :(得分:0)

使用UUID(与GUID非常相似)。 Postgres UUID

你在哪个版本?如果在9.1上尝试只执行CREATE EXTENSION“uuid-ossp”;

您是在Windows上还是在某些* niX盒子上?有关如何安装的详细信息,请参阅此链接,具体取决于您所在的位置。 Install uuid-ossp module

答案 1 :(得分:0)

您可能希望根据数据库来驱动它 - 从ImageList中选择max(id)+1。这样您就可以保证唯一性,而不是具有随机值。您也可以使用UUID,但它们的文件名会更长。

答案 2 :(得分:0)

你可以在这里做一些事情 - 我建议使用PHP在服务器级别做这些事情。您显示的代码似乎是客户端JavaScript。

通常,您可以生成随机数或日期戳(可能更有用)。然后将其替换或附加到文件名。根据您网站的使用情况,这些都应该足够了。

PHP随机数生成器 - rand(0000, 9999)

PHP日期戳生成器(请注意,如果生成日期不包括:字符等会破坏某些图片网址) - date("YmdHis")

我经常使用这样的一些php来清理文件名

$file_name = str_replace(" ", "_", rand(0000, 9999)."_".eregi_replace("[[:space:]]+", " ", strtolower($_FILES['image']['name'])));

这不仅可以通过在文件名中附加4位数的随机数来使其独一无二,而且还可以设置所有的双空格,全部使用小写,并用下划线替换空格。它可能不是最干净但它有效。

答案 3 :(得分:0)

md5(microtime(true)); - 这将是非常独特的。

您可以附加user_idrand(0,1000)以使其更加独特。

替代显然是使用tempnam,它将在bash环境中创建唯一可以重用的临时文件。