FileUpload.SaveAs(String) Metoda

Definicja

Zapisuje zawartość przekazanego pliku do określonej ścieżki na serwerze sieci Web.

public:
 void SaveAs(System::String ^ filename);
public void SaveAs (string filename);
member this.SaveAs : string -> unit
Public Sub SaveAs (filename As String)

Parametry

filename
String

Ciąg określający pełną ścieżkę lokalizacji serwera, na którym ma być zapisany przekazany plik.

Wyjątki

filename nie jest pełną ścieżką.

Przykłady

W poniższym przykładzie pokazano, jak utworzyć kontrolkę wykonującą FileUpload sprawdzanie błędów. Przed zapisaniem pliku wywoływana HasFile jest metoda w celu sprawdzenia, czy plik do przekazania istnieje. Ponadto metoda jest wywoływana File.Exists w celu sprawdzenia, czy plik o tej samej nazwie już istnieje w ścieżce. Jeśli tak, nazwa pliku do przekazania jest poprzedzona liczbą przed SaveAs wywołaną metodą . Zapobiega to zastępowaniu istniejącego pliku.

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>FileUpload.SaveAs Method Example</title>
<script runat="server">
        
    protected void  UploadButton_Click(object sender, EventArgs e)
    {
        // Before attempting to save the file, verify
        // that the FileUpload control contains a file.
        if (FileUpload1.HasFile) 
          // Call a helper method routine to save the file.
          SaveFile(FileUpload1.PostedFile);
        else
          // Notify the user that a file was not uploaded.
          UploadStatusLabel.Text = "You did not specify a file to upload.";
    }
            
      void SaveFile(HttpPostedFile file)
      {            
        // Specify the path to save the uploaded file to.
        string savePath = "c:\\temp\\uploads\\";
            
        // Get the name of the file to upload.
        string fileName = FileUpload1.FileName;
            
        // Create the path and file name to check for duplicates.
        string pathToCheck = savePath + fileName;
        
        // Create a temporary file name to use for checking duplicates.
        string tempfileName = "";
            
        // Check to see if a file already exists with the
        // same name as the file to upload.        
        if (System.IO.File.Exists(pathToCheck)) 
        {
          int counter = 2;
          while (System.IO.File.Exists(pathToCheck))
          {
            // if a file with this name already exists,
            // prefix the filename with a number.
            tempfileName = counter.ToString() + fileName;
            pathToCheck = savePath + tempfileName;
            counter ++;
          }
          
          fileName = tempfileName;
          
          // Notify the user that the file name was changed.
          UploadStatusLabel.Text = "A file with the same name already exists." + 
              "<br />Your file was saved as " + fileName;
        }
        else
        {
          // Notify the user that the file was saved successfully.
          UploadStatusLabel.Text = "Your file was uploaded successfully.";
        }

        // Append the name of the file to upload to the path.
        savePath += fileName;
            
        // Call the SaveAs method to save the uploaded
        // file to the specified directory.
        FileUpload1.SaveAs(savePath);
            
      }
        
</script>

</head>
<body>

    <h3>FileUpload.SaveAs Method Example</h3>

    <form id="Form1" runat="server">
   
        <h4>Select a file to upload:</h4>
       
        <asp:FileUpload id="FileUpload1"                 
            runat="server">
        </asp:FileUpload>
            
        <br /><br />
       
        <asp:Button id="UploadButton" 
            Text="Upload file"
            OnClick="UploadButton_Click"
            runat="server">
        </asp:Button>      
        
        <hr />
       
        <asp:Label id="UploadStatusLabel"
            runat="server">
        </asp:Label>   
         
    </form>

</body>
</html>
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>FileUpload.SaveAs Method Example</title>
<script runat="server">
        
      Sub UploadButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            
        ' Before attempting to save the file, verify
        ' that the FileUpload control contains a file.
        If (FileUpload1.HasFile) Then
          ' Call a helper method routine to save the file.
          SaveFile(FileUpload1.PostedFile)
        Else
          ' Notify the user that a file was not uploaded.
          UploadStatusLabel.Text = "You did not specify a file to upload."
        End If

      End Sub
        
      Sub SaveFile(ByVal file As HttpPostedFile)
            
        ' Specify the path to save the uploaded file to.
        Dim savePath As String = "c:\temp\uploads\"
            
        ' Get the name of the file to upload.
        Dim fileName As String = FileUpload1.FileName
            
        ' Create the path and file name to check for duplicates.
        Dim pathToCheck As String = savePath + fileName
        
        ' Create a temporary file name to use for checking duplicates.
        Dim tempfileName As String
            
        ' Check to see if a file already exists with the
        ' same name as the file to upload.        
        If (System.IO.File.Exists(pathToCheck)) Then
          Dim counter As Integer = 2
          While (System.IO.File.Exists(pathToCheck))
            ' If a file with this name already exists,
            ' prefix the filename with a number.
            tempfileName = counter.ToString() + fileName
            pathToCheck = savePath + tempfileName
            counter = counter + 1
          End While
          
          fileName = tempfileName
          
          ' Notify the user that the file name was changed.
          UploadStatusLabel.Text = "A file with the same name already exists." + "<br />" + _
                                   "Your file was saved as " + fileName
          
        Else
          
          ' Notify the user that the file was saved successfully.
          UploadStatusLabel.Text = "Your file was uploaded successfully."
          
        End If

        ' Append the name of the file to upload to the path.
        savePath += fileName
            
        ' Call the SaveAs method to save the uploaded
        ' file to the specified directory.
        FileUpload1.SaveAs(savePath)
            
      End Sub
        
  </script>

</head>
<body>

    <h3>FileUpload.SaveAs Method Example</h3>

    <form id="Form1" runat="server">
   
        <h4>Select a file to upload:</h4>
       
        <asp:FileUpload id="FileUpload1"                 
            runat="server">
        </asp:FileUpload>
            
        <br /><br />
       
        <asp:Button id="UploadButton" 
            Text="Upload file"
            OnClick="UploadButton_Click"
            runat="server">
        </asp:Button>      
        
        <hr />
       
        <asp:Label id="UploadStatusLabel"
            runat="server">
        </asp:Label>   
         
    </form>

</body>
</html>

Uwagi

Metoda SaveAs zapisuje zawartość przekazanego pliku do określonej ścieżki na serwerze sieci Web.

Kontrolka FileUpload nie zapisuje automatycznie pliku na serwerze po wybraniu pliku do przekazania. Należy jawnie podać kontrolkę lub mechanizm, aby umożliwić użytkownikowi przesłanie określonego pliku. Możesz na przykład podać przycisk, który użytkownik kliknie, aby przekazać plik. Kod zapisywany w celu zapisania określonego pliku powinien wywołać SaveAs metodę , która zapisuje zawartość pliku w określonej ścieżce na serwerze. SaveAs Zazwyczaj metoda jest wywoływana w metodzie obsługi zdarzeń dla zdarzenia, które zgłasza post z powrotem do serwera. Jeśli na przykład podasz przycisk do przesłania pliku, kod do zapisania pliku na serwerze może zostać uwzględniony w metodzie obsługi zdarzeń dla zdarzenia kliknięcia.

Podczas wywoływania SaveAs metody należy określić pełną ścieżkę katalogu na serwerze, w którym ma zostać zapisany przekazany plik. Jeśli nie określisz jawnie ścieżki w kodzie aplikacji, HttpException zostanie zgłoszony wyjątek podczas próby przekazania pliku przez użytkownika. To zachowanie pomaga zapewnić bezpieczeństwo plików na serwerze, nie zezwalając użytkownikom na określenie ścieżki, w której mają być zapisywane przekazywane pliki.

Przed wywołaniem SaveAs metody należy użyć HasFile właściwości , aby sprawdzić, czy kontrolka FileUpload zawiera plik do przekazania. Jeśli metoda HasFile zwraca truewartość , wywołaj metodę SaveAs . Jeśli zwraca falsewartość , wyświetl użytkownikowi komunikat wskazujący, że kontrolka nie zawiera pliku. Jeśli nie podasz kodu obsługującego błędy w celu sprawdzenia, czy plik istnieje, próba zapisania nieistniejący plik zgłosi HttpException wyjątek.

Aby wywołać SaveAs metodę do pracy, aplikacja ASP.NET musi mieć dostęp do zapisu do katalogu na serwerze. Istnieją dwa sposoby uzyskiwania dostępu do zapisu przez aplikację. Możesz jawnie udzielić dostępu do zapisu na koncie, na którym jest uruchomiona aplikacja, w katalogu, w którym zostaną zapisane przekazane pliki. Alternatywnie można zwiększyć poziom zaufania przyznany aplikacji ASP.NET. Aby uzyskać dostęp do zapisu do katalogu wykonawczego dla aplikacji, aplikacja musi otrzymać AspNetHostingPermission obiekt z poziomem zaufania ustawionym AspNetHostingPermissionLevel.Medium na wartość . Zwiększenie poziomu zaufania zwiększa dostęp aplikacji do zasobów na serwerze. Należy pamiętać, że nie jest to bezpieczne podejście, ponieważ złośliwy użytkownik, który uzyskuje kontrolę nad aplikacją, będzie mógł również działać w ramach tego wyższego poziomu zaufania. Najlepszym rozwiązaniem jest uruchomienie aplikacji ASP.NET w kontekście użytkownika z minimalnymi uprawnieniami wymaganymi do uruchomienia aplikacji. Aby uzyskać więcej informacji na temat zabezpieczeń w aplikacjach ASP.NET, zobacz Podstawowe rozwiązania w zakresie zabezpieczeń dla aplikacji internetowych i ASP.NET poziomów zaufania i plików zasad.

Dotyczy

Zobacz też