2010-09-02 10 views
5

Mit dem folgenden Code:nicht überschreiben Datei über Steuerfileupload hochgeladen

protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (FileUpload1.HasFile) 
     { 
      string fileExt = 
       System.IO.Path.GetExtension(FileUpload1.FileName); 

      if (fileExt == ".jpg" || fileExt == ".jpeg" || fileExt == ".gif" || fileExt == ".png") 
      { 
       try 
       { 
        FileUpload1.SaveAs(Server.MapPath("../uploads/originals/" + FileUpload1.FileName)); 
        Label1.Text = "File name: " + 
         FileUpload1.PostedFile.FileName + "<br>" + 
         FileUpload1.PostedFile.ContentLength + " kb<br>" + 
         "Content type: " + 
         FileUpload1.PostedFile.ContentType; 
       } 
       catch (Exception ex) 
       { 
        Label1.Text = "ERROR: " + ex.Message.ToString(); 
       } 
      } 
      else 
      { 
       Label1.Text = "Only image files are allowed!"; 
      } 
     } 
     else 
     { 
      Label1.Text = "You have not specified a file."; 
     } 


    } 

ich es machen wollen, so dass, wenn die Datei vorhanden ist es den Namen ändert, gibt es eine für diese Funktionalität gebaut ? Classic ASP hatte einen Parameter, so dass beim Hochladen sagen house.jpg, und dann wieder würde es Haus (1) .jpg usw. usw., die nützlich war.

Antwort

4
var fileName = file.FileName; 
var extension = Path.GetExtension(fileName); 
var nameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); 

var i = 1; 
while (File.Exists(uploadFolder + fileName)) 
{ 
    fileName = nameWithoutExtension.Trim() + " (" + i + ")" + extension; 
    i++; 
} 

file.SaveAs(uploadFolder + fileName); 
7

Es gibt nichts in gebaut - Sie benötigen, um Ihre eigenen Algorithmus zu machen:

string path = Server.MapPath("../uploads/originals/" + FileUpload1.FileName); 

if(!File.Exists(path)) 
{ 
    FileUpload1.SaveAs(path); 
} 
else 
{ 
    // figure a different file name, perhaps check for existence as well 
} 

Dies kann auch als eine Schleife aufgebaut sein:

string path = Server.MapPath("../uploads/originals/" + FileUpload1.FileName); 

while(File.Exists(path)) 
{ 
    // GetAlternatePath generates a new filename based on the path passed in 
    path = GetAlternatePath(path); 
} 
FileUpload1.SaveAs(path); 
2

Sie können überprüfen, ob die Datei vorhanden ist durch die File statische Klasse mit:

bool exists = System.IO.File.Exists(fileName); 

Es gibt keine integrierte Methode für zusätz ng a (1) an den Dateinamen, aber Sie können die System.IO.Path.GetRandomFileName Methode verwenden, um einen Dateinamen zu erhalten, der garantiert eindeutig ist.Wenn Sie nicht den Dateinamen selbst benötigen, um lesbar zu sein, dann könnte dies nützlich sein.

0

Ich empfehle Ihnen, den Dateinamen mit GUID zu kennzeichnen, um sicherzustellen, dass jede Datei eindeutige Namen hat.

Pflegen Sie die Datenbank mit dem ursprünglichen Dateinamen und ersetzen Sie sie, wenn die Datei heruntergeladen wird.

0

Warum löschen Sie die Datei nicht zuerst, wenn die Datei existiert, und rufen Sie dann die "SaveAs" -Methode auf?

2

Ich habe eine kleine Methode, die ich wie die eindeutigen Dateinamen zu erhalten verwenden, durch Zugabe von (1), (2) usw. auf sie:

public static string GetUniqueFilename(string folder, string postedFileName) 
{ 
    string fileExtension = postedFileName.Substring(postedFileName.LastIndexOf('.') + 1); 
    int index = 2; 

    while (File.Exists(string.Format("{0}/{1}", folder, postedFileName))) 
    { 
     if (index == 2) 
      postedFileName = 
       string.Format("{0} ({1}).{2}", 
           postedFileName.Substring(0, postedFileName.LastIndexOf('.')), 
           index, 
           fileExtension); 
     else 
      postedFileName = 
       string.Format("{0} ({1}).{2}", 
           postedFileName.Substring(0, postedFileName.LastIndexOf(' ')), 
           index, 
           fileExtension); 
     index++; 
    } 

    return postedFileName; 
} 
Verwandte Themen