ASP.NET MVC网站从磁盘读取文件问题

如何解决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\\\\\"...
在根目录下以名称“ \ temp \”创建文件夹并使用
System.Web.HttpContext.Current.Request.MapPath(\"~\\\\temp....
    ,好吧,“它似乎不起作用”是非常模糊的-多一点细节就可以了!但这听起来像是权限问题。 IIS中的默认配置文件对磁盘的访问很少,尤其是写访问。无论如何,在您自己的站点内编写并不是一个好主意(我自己将使用磁盘的无关部分),但是您将需要配置IIS以特定的命名身份运行应用程序,并使用访问磁盘。不幸的是,配置帐户本身(不是IIS-帐户;例如,授予“作为服务的登录名”)作为ASP.NET帐户运行并不是一件容易的事。 另一个想法:您的应用是子应用,即您的应用根是
/
还是
/MyApp/
?我问的原因是,相对于应用程序根目录,即
~/temp/
,使用
MapPath
可能更好。在应用程式内撰写文字是有风险的。您确实希望该文件夹不执行。     ,对于此问题可能有替代解决方案。如果可以在构建时将文件“烘焙”到程序集中,则可以避免完全弄乱路径和文件系统。这是您可以执行的操作: 在Visual Studio解决方案资源管理器中,右键单击文件,然后转到“属性”。 将“构建操作”设置为\“嵌入式资源”。 稍后,您可以使用GetManifestResourceStream读取文件:
    var stream = GetType()
        .Assembly
        .GetManifestResourceStream(\"YourNameSpace.Folder.YourFile.txt\");

    using (var reader = new StreamReader(stream)) {
        var fileContent = reader.ReadToEnd();
    }
更多信息在这里。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?