webForumDet fria alternativet

Hur ändrar man filnamn på en uppladad fil i fall den redan finns på servern.

.NET

5 svar · 734 visningar · startad av kajaBaja

Medlem sedan okt. 20092 inlägg
Frågan#1

Jag har ett problem, jag har en lite applikation och där ska man kunna ladda upp dina bilder, men jag vill kunna ändra namn eller snare lägga till index på filen dvs minBild.jpg kommer att sparas som minBild(1).jpg om minBild.jpg redan finns.
Hur gör man sånt?
Så här ser klassen ut så länge.

public static class Upload
{
    private static bool CheckPictureType(string fileName)
    {
        string extension = Path.GetExtension(fileName);
        switch (extension.ToLower())
        {
            case ".jpg":
                return true;
            case ".gif":
                return true;
            case ".png":
                return true;
            default:
                return false;
        }
    }

    public static string UploadPicture(FileUpload uploadedFile, int maxFileSize)
    {
        if (uploadedFile.HasFile)
        {
            if (uploadedFile.PostedFile.ContentLength < maxFileSize)
            {
                if (CheckPictureType(uploadedFile.FileName))//om det är tillåtet extension
                {
                    //var filen ska sparas
                    string destDir = HttpContext.Current.Server.MapPath("~/APP/Images");
                    //under vilket namn
                    string imageName = Path.GetFileName(uploadedFile.PostedFile.FileName);
                    //kombinerar destDir och imagename
                    string destPath = Path.Combine(destDir, imageName);

                    uploadedFile.PostedFile.SaveAs(destPath);

                    return "filen är uppladad";
                    
                }
                else
                    //filens typ är inte korrekt
                    return "This is not a guilty pic extension.";
            }
            else
                //Den valda filen är för stor
                return "Picture to large, maximum size " + maxFileSize + " bytes.";
        }
        else 
            //ingen fill har blivit valt(uppladnings rutan är tom)
            return "No picture";
    }
}
Medlem sedan dec. 2004736 inlägg
#2

När du har bestämt destPath får du helt enkelt kolla om File.Exists(destPath), och i så fall bestämma ett nytt namn på din bild.

string destPath = Path.Combine(destDir, imageName);
if (File.Exists(destPath))
{
//Bilden finns, skapa nytt namn och kör sedan destPath = Path.Combine(destDir, imageName);
}

Lägg dock märke till att du måste se till att ditt nya namn inte heller används!

Medlem sedan okt. 20092 inlägg
#3

Det är precis jag hela tiden försöker att göra men lyckas inte ändå, när jag debbugar så hamnar han aldrig i den if-en även i fall filen finns redan:-(
Den andra delen tänkte jag lösa med i++ och while.

Medlem sedan dec. 2004736 inlägg
#4

Hur ser den kod du kör ut? (Inkl. if-sats)

Medlem sedan okt. 2007446 inlägg
#5

personligen brukar jag lösa sånt här med att ALLTID döpa om filer som laddas upp eftersom chansen att 2 filer heter samma sak är rätt stor ibland (tex img0001.jpg)

jag lägger helt enkelt till aktuellt datum och tid före eller efter filnamnet
Risken för att 2 filer med samma namn skall laddas upp samma sekund är ju rätt liten

Medlem sedan dec. 2004736 inlägg
#6

rhdf skrev:

personligen brukar jag lösa sånt här med att ALLTID döpa om filer som laddas upp eftersom chansen att 2 filer heter samma sak är rätt stor ibland (tex img0001.jpg)

jag lägger helt enkelt till aktuellt datum och tid före eller efter filnamnet
Risken för att 2 filer med samma namn skall laddas upp samma sekund är ju rätt liten

Ett annat alternativ är att använda GUID, antingen för att döpa om bilden helt eller för att lägga till en del av ett GUID före och/eller efter.

254 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)