Hallo Leute,
Ich habe im Moment das Problem, das ich auf einer ASP.NET Seite einen Dateiupload einbauen will. Im Moment entwickle ich diese Anwendung lokal in meinem Dateisystem und starte die Seite mit dem Webserver der in Visual Studio integriert ist.
Wenn die Basisfunktionalität gegeben ist, würde ich das Projekt gerne auf einen IIS Server in der Firma migrieren.
Wie kann ich jetzt in meinem lokalen Dateisystem einen Fileupload simulieren?
Liebe Grüße
Dragon
ich versteh nicht genau was du willst.
.elron
Hi,
auf der Seite hier (Microsoft Support Page) kannst du folgenden Code für die Uploadprozedur entnehmen:
private void btnUpload_Click(object sender, System.EventArgs e)
{
string strFileName;
string strFilePath;
string strFolder;
strFolder = Server.MapPath("./") ;
// Retrieve the name of the file that is posted.
strFileName = oFile.PostedFile.FileName;
strFileName = Path.GetFileName(strFileName);
if(oFile.Value != "")
{
// Create the folder if it does not exist.
if(!Directory.Exists(strFolder))
{
Directory.CreateDirectory(strFolder);
}
// Save the uploaded file to the server.
strFilePath = strFolder + strFileName;
if(File.Exists(strFilePath))
{
lblUploadResult.Text = strFileName + " already exists on the server!";
}
else
{
oFile.PostedFile.SaveAs(strFilePath);
lblUploadResult.Text = strFileName + " has been successfully uploaded.";
}
}
else
{
lblUploadResult.Text = "Click 'Browse' to select the file to upload.";
}
// Display the result of the upload.
frmConfirmation.Visible = true;
}
Mit dieser Einstellung
strFolder = Server.MapPath("./") ;
werden die Daten in deinen Projektordner geladen.
Musst halt noch den Button, Label und den Namen des Feldes für die Dateiauswahl anpassen.
Gruß
mohnstrudel
@mohnstudel: Danke, das ist eines der Sachen die ich bereits verzweifelt gesucht habe.
Jetzt stellt sich nur noch das Problem, dass ich jedesmal folgenden Fehler bekomme:
Ausnahmedetails: System.UnauthorizedAccessException: Der Zugriff auf den Pfad "C:\Users\Projekte\Upload" wurde verweigert.
Ich hab mir schon gedacht, dass ich aus einer ASP.NET Seite heraus nicht direkt auf mein Dateisystem zugreifen kann. Auf dem IIS sollte das dann doch so funktionieren.
Aber wie kann ich es jetzt noch erreichen, dass ich noch in mein Dateisystem schreiben kann, bis ich das ganze publishen kann?
Hier mein Code:
protected void btnUpload_Click(object sender, EventArgs e)
{
string targetpath = Server.MapPath("./") + Session["user"];
if(Directory.Exists(targetpath))
{
if (File.Exists(targetpath + "/" + fuUpload.PostedFile.FileName))
{
lblError.Text = "Diese Datei existiert bereits";
}
else
{
fuUpload.SaveAs(targetpath);
}
}
else
{
Directory.CreateDirectory(targetpath);
if (File.Exists(targetpath + "/" + fuUpload.PostedFile.FileName))
{
lblError.Text = "Diese Datei existiert bereits";
}
else
{
fuUpload.SaveAs(targetpath);
}
}
fuUpload.SaveAs(targetpath);
}
ja ok hilft mir nicht weiter 😃
Sorry vieleicht hatte ich einfach zu wenig schlaf ^^
Ich versteh immer noch nicht was du machen willst bzw. was es für dich heisst ein
upload zu simulieren ?
Du willst eine seite auf dem IIS haben und ein Filehochladen aber nicht im WWW root die Datei abspeichern sonder woanders auf dem Server?
Wenn ja musst du nur die berechtigungen setzen dann geht das auch 😃
.elron
Es ist ja nicht richtig simulieren.
Es geht nur darum ein auf dem Dateisystem laufendes Projekt dazu zu bringen, eine Datei über die SaveAs Funktion eines asp:FileUpload irgendwohin zu speichern =).
Ich denke das wäre kein Problem, wenn die Seite in einem IIS in einem virtuellen Verzeichnis liegt, aber da es auf mein lokales Dateisystem schreiben will, hat die "Website" keine schreibrechte.
Lg
@elron
Ich würde sagen Blue_Dragon möchte folgendes machen:
Lokale Maschine - Ordner A
Loklae Maschine - Ordner B
Server - Ordner C
Eine Datei befindet sich im Ordner A.
Nun soll sie anstatt von A -> C (hochgeladen), von A -> B hochgeladen (oder eher verschoben) werden.
@Blue_Dragon
Also Zugriff auf dein eigenes System sollte schon möglich sein, bei mir hat's geklappt. Auf die Schnelle fallen mir nur 2 Sachen ein:
hehe ok, ja klar geht das warum sollte das nicht gehen
vorrausgesetzt auf dem Server läuft ein IIS..
ich würde es so mache das du eine Zentralen Receiver hast,
der die daten per POST entgegen nimmt und per QueryString sagst dann noch wo das ganze hin soll am besten schreibst du dir noch ein log File..
.elron
@mohnstrudel:
Das Doppelslash hab ich jetzt zwar behoben, aber es funktioniert leider immer noch nicht 😕. Und in der Session steht der username des eingeloggen Benutzers drin. Für den wird ein Ordner angelegt wenn er noch nicht existiert, bzw. sollen seine Daten drin abgelegt werden, falls er bereits existiert.
Das Problem der Zugriffsberechtigung ist leider immer noch da. Ich versuch gerade herumzutüfteln, warum er mich nicht schreiben lässt.
Hast du schon mal versucht einen anderen Ordner als Ziel zu verwenden?
Wenn ich im Rootfolder einen Ordner anlege, der z.b. "upload" heißt, kann ich dort problemlos Dateien hochladen. Auf dem Zielrechner kannst du ja dann einen virtuellen Ordner namens "upload" verstellen, der woanders hinzeigt.
Alternativ kannst du für deine lokalen Testzwecke doch einfach einen Pfad im Projektordner nehmen? (Bei jedem Startup löscht du dann halt den Inhalt, falls gewünschnt)
mit freundlichen Grüßen,
Tomot
Projekte: www.gesellschaftsspieler-gesucht.de