Sei que essa pergunta foi feita várias vezes aqui, mas não consigo encontrar uma solução para o meu problema. Estou tentando salvar a imagem na pasta em .net c #, mas obtém esta exceção:
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)
Dei controle total a essa pasta (savehere) network service
e iis_iusrs
até dei controle total, everyone
mas ainda obtendo essa exceção. Eu tentei dar acesso via explorer e via gerenciador do IIS, ainda sem sorte
Estou fazendo isso no servidor Windows 2008 R2 e IIS 7.5. Quem preciso dar acesso?
obrigado
Respostas:
Você precisa descobrir no pool de aplicativos do site qual é a identidade em que ele está executando (por padrão, isso é
Application Pool Identity
) e conceder as permissões corretas.fonte
ApplicationPoolIdentity
, como faço para conceder permissões a ele?IIS APPPOOL\DefaultAppPool
usuário. Veja este artigo no site oficial IIS: learn.iis.net/page.aspx/624/application-pool-identitiesDefaultAppPool
e deufull control
permissão para isso, mas ainda obter o mesmo erroeveryone
o controle total. Se concedermoseveryone
o controle Total, mesmo assim, precisamos conceder acesso aDefaultAppPool
? É confuso.Images
diretório do usuário / identidade que está executando o site (será necessário perguntar ao seu provedor de hospedagem sobre isso).Leia a mensagem com atenção. Você está tentando salvar em um arquivo que tenha o mesmo nome que o diretório. Isso não funciona, você não pode sobrescrever um diretório preenchido com arquivos com um único novo arquivo. Isso causaria perda de dados não diagnosticável. "O acesso ao caminho é negado" é o sistema de arquivos que está reagindo para impedir que isso aconteça.
A mensagem de exceção não é ideal, mas vem diretamente do sistema operacional e é lançada em pedra. A estrutura geralmente adiciona verificações extras para gerar mensagens melhores, mas esse é um teste caro em uma rede. Perf também é um recurso.
Você precisa usar um nome como 'C: \ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg'. Considere Path.Combine () para gerar com segurança o nome do caminho.
fonte
Eu estava tendo o mesmo problema ao tentar criar um arquivo no servidor (na verdade, um arquivo que é uma cópia de um modelo).
Aqui está a mensagem de erro completa:
Adicionei uma nova pasta chamada
Templates
dentro da pasta do aplicativo IIS. Uma coisa muito importante no meu caso é que eu precisava conceder a permissão Write (Gravar) para o usuário IUSR nessa pasta. Você também pode precisar de darNetwork Service
eASP.NET v$.#
a mesma permissão de gravação.Depois de fazer isso, tudo funciona como esperado.
fonte
Eu tive exatamente o mesmo problema.
A solução foi que o arquivo que eu estava tentando acessar era somente leitura , pois era copiado de um arquivo de modelo que era somente leitura.
<facepalm />
fonte
Eu tenho esse problema ao tentar salvar o arquivo sem definir o nome do arquivo.
Código antigo
Código de trabalho
fonte
Meu problema era que eu precisava solicitar apenas acesso de leitura:
fonte
Qual Identidade é o seu Pool de Aplicativos para o aplicativo Web em execução como, para solucionar problemas, tente criar um novo Pool de Aplicativos com o nome Serviço de Rede como sua identidade e faça com que seu aplicativo Web use o novo Pool de Aplicativos que você criou e veja se o erro persiste.
fonte
A dica a seguir não é uma resposta para a pergunta original deste tópico, mas pode ajudar outros usuários que acabam nesta página da web, depois de cometer o mesmo erro estúpido que acabei de cometer ...
Eu estava tentando obter um controle ASP.Net FileUpload para carregar o arquivo em um endereço de rede que continha um " compartilhamento oculto ", a saber:
\ MyNetworkServer \ c $ \ SomeDirectoryOrOther
Eu não entendi Se eu executasse a página da Web no modo Debug no Visual Studio, funcionaria bem. Mas quando o projeto foi implantado e estava sendo executado por um usuário do Pool de Aplicativos, ele se recusou a encontrar esse diretório de rede.
Eu verifiquei em qual usuário meu site IIS estava sendo executado, dei a esse usuário permissões completas para este diretório no servidor " MyNetworkServer ", etc etc, mas nada funcionou.
O motivo (claro!) É que apenas os administradores podem "ver" esses compartilhamentos de unidades ocultas.
Minha solução foi simplesmente criar um compartilhamento "normal" para
\ MyNetworkServer \ SomeDirectoryOrOther
e isso se livrou do erro "Acesso ao caminho ... é negado". O FileUpload conseguiu executar com êxito o comando
Espero que isso ajude outros usuários que cometem o mesmo erro que eu cometi!
Observe também que, se você estiver carregando arquivos grandes (acima de 4Mb), o IIS7 exigirá que você modifique o arquivo web.config em dois locais. Clique neste link para ler o que você precisa fazer: Carregar arquivos grandes no ASP.Net
fonte
adicione a permissão de controle total IIS_IUSERS à sua pasta. você encontra essa opção na guia segurança nas propriedades da pasta.
fonte
Eu resolvi com esta configuração:
fonte
Meu problema era algo assim:
mas ao invés de usar o path eu deveria usar File.FullName ... não sei se vai ajudar mais alguém, apenas passando minha própria experiência com esse erro dado!
fonte
Altere a configuração de conta interna para conta personalizada e insira o nome de usuário e a senha do outro servidor.
Mantenha a configuração como integrada (em vez do modo clássico).
fonte
Talvez isso ajude você.
fonte
Faça com que o Diretório seja salvo como diretório virtual e dê permissão de leitura / gravação no painel de controle
fonte
Tinha um diretório com o mesmo nome que o arquivo que eu estava tentando escrever, para que as pessoas possam procurar por isso também.
fonte
Encontrei esse problema ao desenvolver na minha estação de trabalho local.
Após várias
iisreset
invocações malsucedidas , resolvi essa situação reiniciando minha máquina.Em retrospecto, um identificador de arquivo aberto pode estar causando problemas.
fonte
No meu caso, tive que adicionar uma regra de autorização do .NET para o site no IIS.
Eu adicionei uma regra para permitir usuários anônimos.
fonte
Eu tive o mesmo problema, mas o corrigi salvando o arquivo em um local diferente, copiando o arquivo e colando-o no local em que queria que ele estivesse. Usei a opção para substituir o arquivo existente e isso fez o truque para mim. Sei que essa não é a maneira mais eficiente, mas funciona e leva menos de 15 segundos.
fonte
Eu tive muitos problemas com isso, especificamente relacionados ao meu código em execução localmente, mas quando eu precisava executá-lo no IIS, estava lançando esse erro. Descobri que adicionar uma verificação ao meu código e permitir que o aplicativo criasse a pasta na primeira execução corrigia o problema sem ter que mexer nas autorizações das pastas.
algo assim antes de chamar seu método que usa a pasta
fonte
Se você receber esse erro ao fazer upload de arquivos no Subdomínio E funcionar corretamente no seu
localhost
, siga as etapas abaixo:Solução:
Painel Plesk
CPanel
Para mais detalhes consulte aqui
Motivo do erro:
FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))
que será o seu código para mover seus arquivos para o caminho de upload.Server.MapPath
fornecerá o caminho físico (Real Path) do diretório. Mas seu subdomínio pode não ter permissão para acessar o caminho físico.Portanto, se você der permissão ao subdomínio para acessar a permissão de gravação / modificação, ele resolverá o problema.
fonte
Você pode tentar verificar se as propriedades da web do projeto não mudaram para o IIS Express e alterá-las novamente para o IIS Local
fonte
Verifique se o seu destino
System.IO.Delete(string file)
é um arquivo que existe. Talvez haja um erro no seu código; como se você não passasse o nome do arquivo correto para o método, ou se o seu destino é uma pasta. Nesses casos, você verá o erro "acesso negado ao caminho".fonte
Eu criei um diretório virtual com permissão total e adicionei a fonte ffmpeg e os arquivos de vídeo lá, então finalmente fez sentido, pois pode ser acessado por qualquer pessoa.
fonte