ASP.NET MVC网站从磁盘问题中读取文件
我在正在研究的MVC网站上正在使用C#读取包含SQL插入语句的文本文件。 调试我正在使用的函数工作正常,插入发生。 但是一旦我发布网站并在我的本地计算机上运行它(使用IIS设置甚至使用asp.net 4.0)它似乎不起作用。
if (Request.Files != null && Request.Files["txtImportFile"] != null) { //newFilePath = Server.MapPath("\\" + DateTime.Now.Ticks + Request.Files["txtImportFile"].FileName); string[] temp_string = Request.Files["txtImportFile"].FileName.Split(new char[] { '\\' }); string temp_filename = temp_string[temp_string.Count() - 1]; //newFilePath = Server.MapPath("\\temp\\" + DateTime.Now.Ticks + Request.Files["txtImportFile"].FileName); newFilePath = Server.MapPath("\\temp\\" + DateTime.Now.Ticks + temp_filename); Request.Files["txtImportFile"].SaveAs(newFilePath); StreamReader reader = new StreamReader(newFilePath); string contents = reader.ReadToEnd(); reader.Close(); Models.WingsRemoteDbLibrary dbLib = new Models.WingsRemoteDbLibrary(); string update_message = dbLib.UpdateSlaveItemsTable(contents); if (System.IO.File.Exists(newFilePath)) System.IO.File.Delete(newFilePath); RandomPopupView(update_message); }
我希望我的解释听起来不含糊。 我会尽力回答任何进一步的问题。 谢谢。
解决方法:
而不是使用
Server.MapPath("\\temp\\"...
在root下创建名为“temp”的文件夹并使用
System.Web.HttpContext.Current.Request.MapPath("~\\temp....
嗯,“它似乎不起作用”是非常模糊的 – 更多的细节会很好! 但这听起来像是权限问题。 IIS中的默认配置文件几乎无法访问磁盘, 尤其是写访问。 无论如何写在你自己的站点内并不是一个好主意(我自己使用磁盘的一个不相关的部分),但你需要配置IIS以在特定的命名身份中运行应用程序,并且可以访问磁盘。 不幸的是,配置帐户本身 (不是IIS – 帐户;例如授予“作为服务登录”)作为ASP.NET帐户运行并不是特别微不足道。
另一个想法:你的应用程序是一个子应用程序,即你的app-root /
,还是/MyApp/
? 我问的原因是你对MapPath
的使用可能相对于app-root更好地表达,即~/temp/
– 但我再次强调; 在应用程序内部写作是有风险的。 你真的希望该文件夹不执行。
这个问题可能有另一种解决方案。 如果您可以在构建时将文件“烘焙”到程序集中,则可以完全避免弄乱路径和文件系统。 以下是如何执行此操作的方法:
-
在Visual Studio解决方案资源管理器中,右键单击文件并转到“属性”。
-
将Build Action设置为“Embedded Resource”。
-
稍后您可以使用GetManifestResourceStream读取该文件:
var stream = GetType() .Assembly .GetManifestResourceStream("YourNameSpace.Folder.YourFile.txt"); using (var reader = new StreamReader(stream)) { var fileContent = reader.ReadToEnd(); }
更多信息在这里 。
- HowTo:使用MvcContrib.Pagination而不使用MvcContrib.Grid View
- ASP.NET C#MVC – 直接在DB或Model上更改datetime的格式
- 使用asp.net Identity进行Azure AD身份validation以进行授权
- 使用Simple Injector注册IAuthenticationManager
- 获取控制器中强类型模型的“密钥”
- 使用C#将多个参数发布到MVC控制器
- 当为输入字段asp.net mvc输入不正确的数据类型时,覆盖错误消息(值’xxx’对Age无效)
- 如何从URL或路径数据中获取控制器类型和操作信息?
- MVC与Owin JWT身份