Ich weiß, dass diese Frage hier oft gestellt wurde, aber ich kann keine Lösung für mein Problem finden. Ich versuche, das Bild in dem Ordner in .net c # zu speichern, erhalte jedoch die folgende Ausnahme:
Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)
Ich gab diesem Ordner (savehere) die volle Kontrolle network service
und iis_iusrs
gab sogar die volle Kontrolle, bekam everyone
aber immer noch diese Ausnahme. Ich habe versucht, über den Explorer und den IIS-Manager Zugriff zu gewähren, aber immer noch kein Glück
Ich mache es auf Windows Server 2008 R2 und IIS 7.5. Wen brauche ich, um Zugriff zu gewähren?
Vielen Dank
Antworten:
Sie müssen aus dem Anwendungspool für die Website herausfinden, unter welcher Identität sie ausgeführt wird (standardmäßig ist dies
Application Pool Identity
) und die richtigen Berechtigungen erteilen.quelle
ApplicationPoolIdentity
, wie gebe ich Berechtigungen dafür?IIS APPPOOL\DefaultAppPool
Benutzer. Siehe diesen Artikel auf der offiziellen IIS-Website: learn.iis.net/page.aspx/624/application-pool-identitiesDefaultAppPool
undfull control
Berechtigungen erteilt, aber immer noch den gleichen Fehler erhalteneveryone
die volle Kontrolle gegeben hatte. Wenn wireveryone
die volle Kontrolle gewähren , müssen wir auch dann Zugriff gewähren aufDefaultAppPool
? Es ist verwirrend.Images
Verzeichnis / die Identität des Benutzers / der Identität, auf dem / der die Website ausgeführt wird (Sie müssen Ihren Host-Anbieter danach fragen).Lesen Sie die Nachricht sorgfältig durch. Sie versuchen, in einer Datei zu speichern, die denselben Namen wie das Verzeichnis hat. Das kann nicht funktionieren, Sie können ein mit Dateien gefülltes Verzeichnis nicht mit einer einzigen neuen Datei überschreiben. Dies würde zu einem nicht diagnostizierbaren Datenverlust führen. "Zugriff auf den Pfad wird verweigert" ist das Dateisystem, das zurückschlägt, um dies zu verhindern.
Die Ausnahmemeldung ist nicht ideal, kommt jedoch direkt vom Betriebssystem und ist in Stein gemeißelt. Das Framework fügt häufig zusätzliche Überprüfungen hinzu, um bessere Nachrichten zu generieren. Dies ist jedoch ein teurer Test in einem Netzwerk. Perf ist auch ein Feature.
Sie müssen einen Namen wie "C: \ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg" verwenden. Betrachten Sie Path.Combine () , um den Pfadnamen zuverlässig zu generieren.
quelle
Ich hatte das gleiche Problem beim Versuch, eine Datei auf dem Server zu erstellen (eigentlich eine Datei, die eine Kopie einer Vorlage ist).
Hier ist die vollständige Fehlermeldung:
Ich habe einen neuen Ordner
Templates
im IIS-App-Ordner hinzugefügt . Eine sehr wichtige Sache in meinem Fall ist, dass ich dem IUSR-Benutzer in diesem Ordner die Schreibberechtigung (Gravar) erteilen musste. Möglicherweise müssen Sie auch gebenNetwork Service
undASP.NET v$.#
die gleiche Schreibberechtigung.Danach funktioniert alles wie erwartet.
quelle
Ich hatte genau das gleiche Problem.
Die Lösung bestand darin, dass die Datei, auf die ich zugreifen wollte , schreibgeschützt war , da sie aus einer schreibgeschützten Vorlagendatei kopiert wurde.
<facepalm />
quelle
Ich habe dieses Problem, wenn ich versuche, die Datei zu speichern, ohne den Dateinamen festzulegen.
Alter Code
Arbeitscode
quelle
Mein Problem war, dass ich nur um Lesezugriff bitten musste:
quelle
Welche Identität hat Ihr Anwendungspool für die Webanwendung, die ausgeführt wird? Versuchen Sie zur Fehlerbehebung, einen neuen App-Pool mit beispielsweise Netzwerkdienst als Identität zu erstellen, und lassen Sie Ihre Webanwendung den von Ihnen erstellten neuen App-Pool verwenden, um festzustellen, ob der Fehler weiterhin besteht.
quelle
Der folgende Tipp ist keine Antwort auf die ursprüngliche Frage dieses Threads, könnte aber einigen anderen Benutzern helfen, die auf dieser Webseite landen, nachdem sie denselben dummen Fehler gemacht haben, den ich gerade gemacht habe ...
Ich habe versucht, ein ASP.Net FileUpload-Steuerelement zum Hochladen seiner Datei an eine Netzwerkadresse zu erhalten, die eine " versteckte Freigabe " enthielt , nämlich:
\ MyNetworkServer \ c $ \ SomeDirectoryOrOther
Ich habe es nicht verstanden Wenn ich die Webseite im Debug-Modus in Visual Studio ausführen würde, würde es gut funktionieren. Bei der Bereitstellung des Projekts, das über einen Benutzer des Anwendungspools ausgeführt wurde, wurde dieses Netzwerkverzeichnis jedoch nicht gefunden.
Ich hatte überprüft, unter welchem Benutzer meine IIS-Site ausgeführt wurde, diesem Benutzer die vollständigen Berechtigungen für dieses Verzeichnis auf dem Server " MyNetworkServer " usw. usw. erteilt , aber nichts funktionierte.
Der Grund (natürlich!) Ist, dass nur Administratoren diese verborgenen Laufwerksfreigaben "sehen" können.
Meine Lösung bestand einfach darin, eine "normale" Freigabe für zu erstellen
\ MyNetworkServer \ SomeDirectoryOrOther
und dies beseitigte den Fehler "Zugriff auf den Pfad ... wird verweigert". Der FileUpload konnte den Befehl erfolgreich ausführen
Hoffe, das hilft einigen anderen Benutzern, die den gleichen Fehler machen, den ich gemacht habe!
Beachten Sie auch, dass IIS7 beim Hochladen großer Dateien (über 4 MB) die Datei web.config an zwei Stellen ändern muss . Klicken Sie auf diesen Link, um zu lesen, was Sie tun müssen: Hochladen großer Dateien in ASP.Net
quelle
Bitte fügen Sie Ihrem Ordner die Vollzugriffsberechtigung IIS_IUSERS hinzu. Sie finden diese Option auf der Registerkarte Sicherheit in den Ordnereigenschaften.
quelle
Ich habe mit dieser Einstellung gelöst:
quelle
Mein Problem war so etwas:
aber anstatt path zu verwenden, sollte ich File.FullName verwenden ... Ich weiß nicht, ob es jemand anderem helfen wird, nur meine eigenen Erfahrungen mit diesem gegebenen Fehler weiterzugeben!
quelle
Ändern Sie die Einstellung vom integrierten Konto in ein benutzerdefiniertes Konto und geben Sie den Benutzernamen und das Kennwort des anderen Servers ein.
Behalten Sie die Einstellung als integriert bei (anstelle des klassischen Modus).
quelle
Vielleicht hilft es dir.
quelle
Machen Sie das Verzeichnis savehere zum virtuellen Verzeichnis und erteilen Sie der Systemsteuerung Lese- / Schreibrechte
quelle
Hatte ein Verzeichnis mit dem gleichen Namen wie die Datei, die ich schreiben wollte, damit die Leute auch darauf achten können.
quelle
Dieses Problem ist bei der Entwicklung auf meiner lokalen Workstation aufgetreten.
Nach mehreren erfolglosen
iisreset
Aufrufen habe ich diese Situation durch einen Neustart meines Computers behoben .Rückblickend kann ein offenes Dateihandle Probleme verursacht haben.
quelle
In meinem Fall musste ich eine .NET-Autorisierungsregel für die Website in IIS hinzufügen.
Ich habe eine Regel hinzugefügt, um anonyme Benutzer zuzulassen.
quelle
Ich hatte das gleiche Problem, aber ich habe es behoben, indem ich die Datei an einem anderen Ort gespeichert und dann kopiert und an der Stelle eingefügt habe, an der ich sie haben wollte. Ich habe die Option verwendet, um die vorhandene Datei zu ersetzen, und das hat den Trick für mich getan. Ich weiß, dass dies nicht der effizienteste Weg ist, aber es funktioniert und dauert weniger als 15 Sekunden.
quelle
Ich hatte große Probleme damit, insbesondere im Zusammenhang mit meinem lokal ausgeführten Code, aber als ich ihn auf IIS ausführen musste, wurde dieser Fehler ausgelöst. Ich habe festgestellt, dass das Hinzufügen eines Häkchens zu meinem Code und das Erstellen des Ordners durch die Anwendung beim ersten Ausführen das Problem behoben hat, ohne dass die Ordnerberechtigungen durcheinander gebracht werden mussten.
So etwas, bevor Sie Ihre Methode aufrufen, die den Ordner verwendet
quelle
Wenn Sie diese Fehlermeldung beim Hochladen von Dateien in der Subdomain erhalten und in Ihrer ordnungsgemäß funktionieren, gehen Sie wie
localhost
folgt vor:Lösung:
Plesk Panel
CPanel
Weitere Details finden Sie hier
Grund für den Fehler:
FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))
wird Ihr Code sein, um Ihre Dateien in den Upload-Pfad zu verschieben.Server.MapPath
gibt Ihnen den physischen Pfad (Real Path) des Verzeichnisses. Ihre Subdomain verfügt jedoch möglicherweise nicht über die Berechtigung zum Zugriff auf den physischen Pfad.Wenn Sie der Subdomain die Berechtigung zum Zugriff auf Schreib- / Änderungsberechtigungen erteilen, wird das Problem behoben.
quelle
Sie können versuchen, zu überprüfen, ob Ihre Web-Eigenschaften für das Projekt nicht zu IIS Express gewechselt sind, und sie wieder in IIS Local ändern
quelle
Stellen Sie sicher, dass Ihr Ziel in
System.IO.Delete(string file)
eine Datei ist, die vorhanden ist. Möglicherweise liegt ein Fehler in Ihrem Code vor, als würden Sie nicht den richtigen Dateinamen an die Methode übergeben, oder Ihr Ziel ist ein Ordner. In diesen Fällen wird Folgendes angezeigt: "Der Zugriff auf den Pfad wird als Fehler verweigert".quelle
Ich habe ein virtuelles Verzeichnis mit voller Berechtigung erstellt und dort die ffmpeg-Quell- und Videodateien hinzugefügt, sodass es schließlich Sinn machte, da es von jedem zugänglich sein kann.
quelle