将文件写入 Web 服务器 - ASP.NET
Posted
技术标签:
【中文标题】将文件写入 Web 服务器 - ASP.NET【英文标题】:Writing file to web server - ASP.NET 【发布时间】:2010-11-19 02:51:54 【问题描述】:我只是想将 TextBox 控件的内容写入 Web 服务器目录根目录中的一个文件中……我该如何指定它?
请记住,我正在本地测试它...它一直将文件写入我的程序 files\visual studio\Common\IDE 目录而不是我的项目目录(我假设 root 是 Web 服务器时的位置开火)。
我的问题是否与在我的 web.config 中指定正确的位置有关?我试过了,还是不行……
非常感谢...
protected void TestSubmit_ServerClick(对象发送者,EventArgs e) StreamWriter _testData = new StreamWriter("data.txt", true); _testData.WriteLine(TextBox1.Text); // 写入文件。 _testData.Close(); // 关闭 StreamWriter 的实例。 _testData.Dispose(); // 从内存中释放。【问题讨论】:
如果这不仅仅是一个简单的测试项目从不保存到您的 Web 服务器目录的根目录。使用全世界都无法访问的临时文件夹,否则用户可以在您的服务器上放置任意内容。 【参考方案1】:protected void TestSubmit_ServerClick(object sender, EventArgs e)
using (StreamWriter _testData = new StreamWriter(Server.MapPath("~/data.txt"), true))
_testData.WriteLine(TextBox1.Text); // Write the file.
Server.MapPath 采用虚拟路径并返回绝对路径。 “~”用于解析到应用根目录。
【讨论】:
正如@SpencerRuport 提到的,在根目录上设置写权限并不是一个好主意。例如,最好创建具有写入权限的新文件夹并将其用于所有输出。【参考方案2】:File
类中有 WriteAllText
之类的方法,用于对文件进行常用操作。
使用MapPath
方法获取Web 应用程序中文件的物理路径。
File.WriteAllText(Server.MapPath("~/data.txt"), TextBox1.Text);
【讨论】:
我一直用这个方法,现在也想用,但是执行的时候没有失败,也没有往文件里写任何东西!!我尝试使用 Exists 方法检查文件,它返回 true,不知道是什么问题!【参考方案3】:protected void TestSubmit_ServerClick(object sender, EventArgs e)
using (StreamWriter w = new StreamWriter(Server.MapPath("~/data.txt"), true))
w.WriteLine(TextBox1.Text); // Write the text
【讨论】:
请注意,如果您在后面的代码中编写代码,Server.MapPath 是System.Web.HttpContext.Current.Server.MapPath
。【参考方案4】:
请记住,一旦您上传到您的网络服务器,您还必须授予 IUSR 帐户对该文件夹的写入权限。
我个人建议不要允许对根文件夹进行写访问,除非您有充分的理由这样做。然后您需要注意您允许保存的文件类型,以免无意中允许某人编写自己的 ASPX 页面。
【讨论】:
以上是关于将文件写入 Web 服务器 - ASP.NET的主要内容,如果未能解决你的问题,请参考以下文章
如何将文件从 ASP.NET 上传到另一个 Web 应用程序
ASP.NET Web 部署项目:摆脱 .compiled 文件
如何使用 Retrofit 在 android 中调用图像上传 Web 服务 (ASP.NET) .asmx 文件
在 ASP.NET Core 2.2 中使用 InProcess 托管模型时,Serilog 不会将日志写入文件
System.Web.HttpCompileException (0x80004005): : error CS0016: 未能写入输出文件