FileUpload.SaveAs(String) Método

Definición

Guarda el contenido de un archivo cargado en una ruta de acceso especificada en el servidor web.

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

Parámetros

filename
String

Cadena que especifica la ruta de acceso completa de la ubicación del servidor donde se guardará el archivo cargado.

Excepciones

filename no es una ruta de acceso completa.

Ejemplos

En el ejemplo siguiente se muestra cómo crear un FileUpload control que realiza la comprobación de errores. Antes de guardar el archivo, HasFile se llama al método para comprobar que existe un archivo que se va a cargar. Además, se llama al File.Exists método para comprobar si ya existe un archivo con el mismo nombre en la ruta de acceso. Si es así, el nombre del archivo que se va a cargar tiene como prefijo un número antes de llamar al SaveAs método . Esto impide que se sobrescriba el archivo existente.

<%@ 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>

Comentarios

El SaveAs método guarda el contenido de un archivo cargado en una ruta de acceso especificada en el servidor web.

El FileUpload control no guarda automáticamente un archivo en el servidor después de que el usuario seleccione el archivo que se va a cargar. Debe proporcionar explícitamente un control o mecanismo para permitir al usuario enviar el archivo especificado. Por ejemplo, puede proporcionar un botón en el que el usuario hace clic para cargar el archivo. El código que escriba para guardar el archivo especificado debe llamar al SaveAs método , que guarda el contenido de un archivo en una ruta de acceso especificada en el servidor. Normalmente, se llama al SaveAs método en un método de control de eventos para un evento que genera una publicación de vuelta al servidor. Por ejemplo, si proporciona un botón para enviar un archivo, el código para guardar el archivo en el servidor podría incluirse dentro del método de control de eventos para el evento click.

Al llamar al SaveAs método , debe especificar la ruta de acceso completa del directorio en el servidor en el que se va a guardar el archivo cargado. Si no especifica explícitamente una ruta de acceso en el código de la aplicación, se produce una HttpException excepción cuando un usuario intenta cargar un archivo. Este comportamiento ayuda a proteger los archivos en el servidor, ya que no permite a los usuarios especificar una ruta de acceso en la que guardar los archivos que cargan.

Antes de llamar al SaveAs método , debe usar la HasFile propiedad para comprobar que el FileUpload control contiene un archivo que se va a cargar. HasFile Si devuelve true, llame al SaveAs método . Si devuelve false, muestra un mensaje al usuario que indica que el control no contiene un archivo. Si no proporciona código de control de errores para comprobar que existe un archivo, un intento de guardar un archivo inexistente produce una HttpException excepción.

Para que una llamada a funcione SaveAs , la aplicación ASP.NET debe tener acceso de escritura al directorio del servidor. Hay dos maneras de que la aplicación pueda obtener acceso de escritura. Puede conceder explícitamente acceso de escritura a la cuenta en la que se ejecuta la aplicación, en el directorio en el que se guardarán los archivos cargados. Como alternativa, puede aumentar el nivel de confianza que se concede a la aplicación ASP.NET. Para obtener acceso de escritura al directorio en ejecución de la aplicación, se debe conceder al objeto el AspNetHostingPermission objeto con el nivel de confianza establecido en el AspNetHostingPermissionLevel.Medium valor . Aumentar el nivel de confianza aumenta el acceso de la aplicación a los recursos del servidor. Tenga en cuenta que esto no es un enfoque seguro, ya que un usuario malintencionado que obtiene el control de la aplicación también podrá ejecutarse bajo este nivel de confianza superior. Se recomienda ejecutar una aplicación de ASP.NET en el contexto de un usuario que tenga los privilegios mínimos necesarios para que se ejecute la aplicación. Para obtener más información sobre la seguridad en las aplicaciones de ASP.NET, vea Prácticas de seguridad básicas para aplicaciones web y ASP.NET niveles de confianza y archivos de directiva.

Se aplica a

Consulte también