最近将公司部分系统(IIS运行)从2003迁移到了2012,迁移之后功能运行正常,但是业务系统中的附件无法下载了,下载时报错system.io.__error。查看后台代码,为new System.IO.FileStream(filepath, FileMode.Open)报错。
进一步测试发现新上传的文件可以下载,只有从旧服务器中复制过来的文件无法下载。分析可能是权限问题。分别查看新旧上传文件,发现文件属性中安全一栏,新上传的文件对defaultAppPool有读写和执行权限.想给之前的文件也加上,却发现系统中根本找不到这个用户名。
网上找了一圈,都是说IIS将用户映射到IUSER上,只需要对IIS要读取的文件夹赋予IUSER读写权限即可。但是经我的测试,在文件夹属性-安全-编辑-添加,这里加上IUSER的权限后,仍然无法读取。
试验几个小时,发现最后的解决办法:
文件夹属性中,安全一栏,不是直接赋予IUSER读写权限,而是在“有关特殊权限或高级设置,请单击高级”,这里,点击“高级”,在弹出的“高级安全设置中“添加IUSER的读写权限。