将文件写入 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 文件

ASP.NET将文件写到另一服务器

如何使用 Retrofit 在 android 中调用图像上传 Web 服务 (ASP.NET) .asmx 文件

在 ASP.NET Core 2.2 中使用 InProcess 托管模型时,Serilog 不会将日志写入文件

System.Web.HttpCompileException (0x80004005): : error CS0016: 未能写入输出文件