FileUpload.SaveAs(String) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Uloží obsah nahraného souboru na zadanou cestu na webovém serveru.
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
Řetězec, který určuje úplnou cestu k umístění serveru, na kterém se má nahraný soubor uložit.
Výjimky
filename není úplná cesta.
Příklady
Následující příklad ukazuje, jak vytvořit FileUpload ovládací prvek, který provádí kontrolu chyb. Před uložením HasFile souboru je volána metoda k ověření, že soubor k nahrání existuje. Kromě toho je volána metoda ke kontrole, File.Exists zda soubor, který má stejný název již existuje v cestě. Pokud ano, název souboru, který se má nahrát, má před zavolání metody předponu čísla SaveAs . Tím zabráníte přepsání existujícího souboru.
<%@ 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>
Poznámky
Metoda SaveAs uloží obsah nahraného souboru do zadané cesty na webovém serveru.
Ovládací FileUpload prvek automaticky neuloží soubor na server poté, co uživatel soubor vybere k nahrání. Musíte explicitně zadat ovládací prvek nebo mechanismus, který uživateli umožní odeslat zadaný soubor. Můžete například zadat tlačítko, na které uživatel klikne, aby soubor nahrál. Kód, který zapíšete pro uložení zadaného souboru, by měl volat metodu SaveAs , která uloží obsah souboru do zadané cesty na serveru. SaveAs Metoda se obvykle volá v metodě zpracování událostí pro událost, která vyvolá příspěvek zpět na server. Pokud například zadáte tlačítko pro odeslání souboru, kód pro uložení souboru na server by pak mohl být zahrnut do metody zpracování událostí události událostí události.
Při volání SaveAs metody je nutné zadat úplnou cestu k adresáři na serveru, do kterého chcete uložit nahraný soubor. Pokud v kódu aplikace explicitně nezadáte cestu, vyvolá se výjimka, HttpException když se uživatel pokusí nahrát soubor. Toto chování pomáhá udržet soubory na serveru zabezpečené, protože neumožňuje uživatelům zadat cestu, do které se mají ukládat soubory, které nahrávají.
Před voláním SaveAs metody byste měli použít HasFile vlastnost k ověření, zda FileUpload ovládací prvek obsahuje soubor k nahrání. Pokud se HasFile vrátí true, zavolejte metodu SaveAs . Pokud se vrátí false, zobrazte uživateli zprávu, že ovládací prvek neobsahuje soubor. Pokud nezadáte kód pro zpracování chyb pro ověření, že soubor existuje, při pokusu o uložení neexistujícího souboru dojde k výjimce HttpException .
Aby volání SaveAs do práce fungovalo, musí mít aplikace ASP.NET přístup k zápisu do adresáře na serveru. Existují dva způsoby, jak může aplikace získat přístup k zápisu. Přístup k zápisu můžete explicitně udělit účtu, pod kterým je aplikace spuštěná, v adresáři, ve kterém se nahrané soubory uloží. Případně můžete zvýšit úroveň důvěryhodnosti, která je udělena ASP.NET aplikaci. Chcete-li získat přístup k zápisu do spuštěného adresáře pro aplikaci, musí být aplikace udělena AspNetHostingPermission objektu s úrovní důvěryhodnosti nastavenou na AspNetHostingPermissionLevel.Medium hodnotu. Zvýšení úrovně důvěryhodnosti zvyšuje přístup aplikace k prostředkům na serveru. Mějte na paměti, že tento přístup není bezpečný, protože škodlivý uživatel, který získá kontrolu nad vaší aplikací, bude moci běžet i pod touto vyšší úrovní důvěryhodnosti. Osvědčeným postupem je spustit aplikaci ASP.NET v kontextu uživatele, který má minimální oprávnění, která jsou nutná ke spuštění aplikace. Další informace o zabezpečení v aplikacích ASP.NET naleznete v tématu Základní postupy zabezpečení webových aplikací a ASP.NET Úrovně důvěryhodnosti a soubory zásad.