我最近将我的 asp.net 应用程序从 windows 2003 / IIS 6 移到了 windows IIS7。没有其他更改,但现在 fckeditor 的文件上传不再起作用。任何人都知道我在这里犯的明显错误。:)
谢谢
最可能的问题是需要更新目标文件夹的权限。检查以确保 IUSR 对上传目录具有创建/写入权限。
也许这会有所帮助。
我也无法让它工作。我设置了所有权限。通过调试,我发现frmupload.html对isapi.dll没有执行权限。
在 IIS 7.0 中,我转到左侧的网站并突出显示它。然后在右窗格中,我单击了处理程序映射。我在顶部注意到 isapi 和 cgi 在顶部被禁用。
我往下看,看到了所有启用的处理程序。我还注意到 *.html 没有一个,但 *.html 有一个。无论如何,我右键单击下方窗格中启用的处理程序所在的任何位置,我得到了一个快捷菜单。编辑功能权限是您要单击的选项。然后你会看到读取、脚本和执行的复选框。我注意到未检查执行,所以我检查了它。
现在 ISAPI 和 CGI 已在列表中启用。我尝试使用 FCKeditor 上传,它工作正常。只需确保将正确的文件类型上传到正确的区域,否则您可能会收到无效文件或无效文件类型消息。
但是,我注意到我不断收到一个新错误。SYS 在我的网页上是未定义的错误消息。它是一个 javascript 错误,通常在找不到某些内容时发生。如果您在谷歌上搜索,您可能会收到此错误消息,有很多原因。在这种情况下,这是因为我使用 Vista IIS7.0 启用了具有执行权限的 ISAPI。它进入了我的配置文件,并为启用执行权限进行了正确的设置更改,但是它删除了我所有的处理程序设置!!!!
我备份了我的 webconfig 并手动读取了设置。我认为手动编辑 webconfig 文件而不是让 IIS7 这样做可能会更好,因为它会这样做,但它可能会删除您的一些设置。
这是我在 VISTA IIS7 Web 服务器上的 webconfig 文件的一部分,之前和之后:
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
之后:注意
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<remove name="ScriptModule" />
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers accessPolicy="Read, Execute, Script">
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
我在开发机器 VISTA 上,所以我没有考虑打开 Execute 的任何安全问题。希望这可以帮助。
就像 Sohnee 所说的最可能的权限一样,还要确保“上传”文件夹确实存在于您的“公共”文件夹中(我不确定它在 ASP 中的位置)。
确保 asp.net 和 iisuser_machinename 用户将拥有权限。