FileUpload.SaveAs(String) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Guarda o conteúdo de um ficheiro carregado num caminho especificado no 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
Uma cadeia que especifica o caminho completo da localização do servidor onde se deve guardar o ficheiro carregado.
Exceções
filename não é um caminho completo.
Exemplos
O exemplo seguinte demonstra como criar um FileUpload controlo que realize verificação de erros. Antes de o ficheiro ser guardado, o HasFile método é chamado para verificar se existe um ficheiro a carregar. Além disso, o File.Exists método é chamado para verificar se um ficheiro com o mesmo nome já existe no caminho. Se o fizer, o nome do ficheiro a carregar é precedido por um número antes de o SaveAs método ser chamado. Isto impede que o ficheiro existente seja sobrescrito.
<%@ 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>
Observações
O SaveAs método guarda o conteúdo de um ficheiro carregado para um caminho especificado no servidor Web.
O FileUpload controlo não guarda automaticamente um ficheiro no servidor depois de o utilizador selecionar o ficheiro a carregar. Deve fornecer explicitamente um controlo ou mecanismo que permita ao utilizador submeter o ficheiro especificado. Por exemplo, pode fornecer um botão que o utilizador clica para carregar o ficheiro. O código que escreves para guardar o ficheiro especificado deve chamar o SaveAs método, que guarda o conteúdo de um ficheiro num caminho especificado no servidor. Normalmente, o SaveAs método é chamado num método de gestão de eventos para um evento que eleva uma publicação de volta ao servidor. Por exemplo, se fornecer um botão para submeter um ficheiro, o código para guardar o ficheiro no servidor pode então ser incluído dentro do método de gestão de eventos para o evento de clique.
Ao chamar o SaveAs método, deve especificar o caminho completo do diretório no servidor onde deve guardar o ficheiro carregado. Se não especificar explicitamente um caminho no código da sua aplicação, é lançada uma HttpException exceção quando um utilizador tenta carregar um ficheiro. Este comportamento ajuda a manter os ficheiros no servidor seguros, ao não permitir que os utilizadores especifiquem um caminho para guardar os ficheiros que carregam.
Antes de chamar o SaveAs método, deve usar a HasFile propriedade para verificar se o FileUpload controlo contém um ficheiro para carregar. Se o HasFile retorno true, chama o SaveAs método. Se devolver false, exibe uma mensagem ao utilizador indicando que o controlo não contém um ficheiro. Se não fornecer código de tratamento de erros para verificar a existência de um ficheiro, uma tentativa de guardar um ficheiro inexistente lança uma HttpException exceção.
Para que uma chamada ao SaveAs funcione, a aplicação ASP.NET deve ter acesso de escrita ao diretório no servidor. Existem duas formas de a aplicação obter acesso por escrita. Pode conceder explicitamente acesso por escrita à conta sob a qual a aplicação está a correr, no diretório onde os ficheiros carregados serão guardados. Em alternativa, pode aumentar o nível de confiança concedido à aplicação ASP.NET. Para obter acesso de escrita ao diretório em execução da aplicação, a aplicação deve receber o AspNetHostingPermission objeto com o nível de confiança definido para o AspNetHostingPermissionLevel.Medium valor. Aumentar o nível de confiança aumenta o acesso da aplicação aos recursos do servidor. Note que esta não é uma abordagem segura, porque um utilizador malicioso que tome controlo da sua aplicação também poderá correr sob este nível superior de confiança. É uma boa prática executar uma aplicação ASP.NET no contexto de um utilizador que tem os privilégios mínimos necessários para a aplicação funcionar. Para mais informações sobre segurança em aplicações ASP.NET, consulte Práticas Básicas de Segurança para Aplicações Web e ASP.NET Níveis de Confiança e Ficheiros de Políticas.