如果照片名称已存在于数据库中,则生成唯一的照片名称

时间:2018-03-09 07:25:15

标签: c# asp.net gridview

我有一个数据库,我上传文件夹和照片名称的照片路径名称,我可以在GridView中提取照片。

我的问题是当我尝试从GridView更新照片时,它的作用是如果照片名称相同,那么它会替换路径文件夹中同名的上一张照片,从而从路径中删除该照片文件夹中。

如果照片名称已准备就绪,我想要的是如何生成唯一的照片名称?

这是我的代码:

protected void GridView5_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string Id = GridView5.DataKeys[e.RowIndex].Value.ToString();

    FileUpload FileUpload1 = (FileUpload)GridView5.Rows[e.RowIndex].FindControl("FileUpload1");

    con = new SqlConnection(connStr);

    string path = "~/PPhoto/";

    if (FileUpload1.HasFile)
    {
        for (int i = 0; i < Request.Files.Count; i++)
        {
            path += FileUpload1.FileName;

            // save image in folder
            FileUpload1.SaveAs(MapPath(path));

            SqlCommand cmd = new SqlCommand("update tblLogin set Pic = @Pic, ImageName = @ImageName where LoginId=" + Id + "", con);

            cmd.Parameters.AddWithValue("@Pic", path);
            cmd.Parameters.AddWithValue("@ImageName", FileUpload1.FileName);

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();                  
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您必须使用以下方法生成随机数:

private int GenerateRandomCode()
{
    Random rnd = new Random();
    int randomNumber = rnd.Next(1, 999); // creates a number between 1 and 999
    return randomNumber;
}

然后连接生成带文件名的号码(不使用Path.GetFileNameWithoutExtension Method (String)扩展名),如下所示:

string namewithoutextension = Path.GetFileNameWithoutExtension(path);// pass full path here
string filename = namewithoutextension + GenerateRandomCode(); // result: e.g. ImageName565

顺便说一句:您还应该使用LoginId方法cmd.Parameters.AddWithValue("@LoginId", Id);

class User (AbstractUser):
        bio = models.TextField(max_length=500, blank=True)
        birth_date = models.DateField(null=True, blank=True)
        image=models.FileField(null=True , blank=True)