Upload файлов с уникальными именами в ASP.NET

Upload файлов с уникальными именами в ASP.NET 

Христофоров Юрий 

Задача: необходимо загружать файлы в папку upload на сервере с уникальными именами. Т.е. при загрузке двух файлов с одинаковыми именами они должны сохраняться под уникальными именами и не перезаписывать друг друга. В ASP.NET эта задача легко решается с помощью класса Guid. Т.о. файл будет сохранен например под именем fe008e1a-f07c-4263-8dc4-67f042a8cbdb_valley.jpg.

Папка upload должна иметь NTFS права на чтение/запись/изменение для интернет-пользователя. 

Файл upload_cs.aspx (написан на C#): 

<%@ Page Language="C#" %> 

<script language="C#" runat="server"> 

void Upload_Click(Object sender, EventArgs e) { 

string strFileName, strRootUpload, strUniqueName; 

int index; 

strRootUpload = Server.MapPath("./upload"); 

lblMessage.Text = ""; 

if (fileInp.PostedFile != null) { 

try { 

  strFileName = fileInp.PostedFile.FileName; 

  if (strFileName != "") { 

    strFileName = strFileName.Replace("/", "\\"); 

    index = strFileName.LastIndexOf("\\"); 

    strFileName = strFileName.Substring(index + 1); 

    strUniqueName = System.Guid.NewGuid().ToString() + "_" + strFileName; 

    fileInp.PostedFile.SaveAs(strRootUpload + "\\" + strUniqueName); 

    lblMessage.Text = "Файл успешно загружен с именем " + strUniqueName + "<p>"; 

  } 

} 

catch (Exception ex) { 

  lblMessage.Text = ex.Message + "<p>"; 

} 

} 

} 

</script> 

<HTML> 

<HEAD> 

<Title>Unique Upload</Title> 

</HEAD> 

<BODY> 

<form enctype="multipart/form-data" runat="server"> 

<asp:Label id="lblMessage" runat="server" /> 

Файл:<br> 

<input id="fileInp" type="file" runat="server"><br> 

<asp:button text="Загрузить" OnClick="Upload_Click" runat="server" /> 

</form> 

</BODY> 

</HTML> 

Файл upload_vb.aspx (написан на VB.NET): 

<%@ Page Language="VB" %> 

<script language="VB" runat="server"> 

Sub Upload_Click(ByVal sender As Object, ByVal e As EventArgs) 

Dim strFileName, strRootUpload , strUniqueName As String 

Dim index As Integer 

strRootUpload = Server.MapPath("./upload") 

lblMessage.Text = "" 

If Not (fileInp.PostedFile Is Nothing) Then 

  Try 

  strFileName = fileInp.PostedFile.FileName 

  If strFileName <> "" Then 

    strFileName = strFileName.Replace("/", "\") 

    index = strFileName.LastIndexOf("\") 

    strFileName = strFileName.Substring(index + 1) 

    strUniqueName = System.Guid.NewGuid().ToString() + "_" + strFileName 

    fileInp.PostedFile.SaveAs(strRootUpload & "\" & strUniqueName) 

    lblMessage.Text = "Файл успешно загружен с именем " & strUniqueName & "<p>" 

  End if 

  Catch ex As Exception 

    lblMessage.Text = ex.Message & "<p>" 

  End Try 

End If 

End Sub 

</script> 

<HTML> 

<HEAD> 

<Title>Unique Upload</Title> 

</HEAD> 

<BODY> 

<form enctype="multipart/form-data" runat="server"> 

<asp:Label id="lblMessage" runat="server" /> 

Файл:<br> 

<input id="fileInp" type="file" runat="server"><br> 

<asp:button text="Загрузить" OnClick="Upload_Click" runat="server" /> 

</form> 

</BODY> 

</HTML>