2009-08-27 58 views
1

我的Web应用程序希望将文件作为附件发送到电子邮件。这是相当可行的;我所要做的就是指定文件的路径。但在发送文件之前,系统必须创建文件 - 它是一个呈现的报告。重要的不是保存在哪里,因为它将在附件中。既然如此,我无法弄清楚如何编写这个文件。它在我的本地主机上运行,​​但不在我公司的开发服务器上运行时运行。错误消息是500个;不具说明性和未知的。在ASP.Net中创建文件

这是当用户点击一个按钮,生成将通过电子邮件获取她的老板一份报告,蒸腾作用的事件处理程序的一部分:

在此代码段,分机是一些变量三个字母的文件扩展名和内容内容是在ReportExecutionService对象上执行Render的返回值:

var rptPath = HttpContext.Current.Server.MapPath(string.Format("Report.{0}", ext)); 
//using (var fs = new FileStream(rptPath, FileMode.OpenOrCreate, FileAccess.Write)) 
using (var fs = File.Create(rptPath)) 
{ 
    fs.Write(content, 0, content.Length); 
} 

...此时它引发异常。我通过右键单击开发服务器的文件系统并放宽对该帐户的权限来授予NetworkService帐户写入权限。我还放宽了在开发服务器上托管Web应用程序的IIS 6的安全性。还有什么需要做的?我只是想将.pdf文件吐到根网站目录。

+0

如果你报告了确切的例外,它会更有用。 – 2009-08-29 12:28:50

+0

该应用程序被埋在Ajax中,除了一个黄色的Javascript错误三角形表示未知的错误500发生以外,没有明确的例外。 – JonathanWolfson 2009-08-30 11:59:09

回答

0

它适用于我右键单击文件夹并授予安全权限完全访问ASPNET帐户。当我将这个授权给NetworkService帐户时,它不起作用,但是当我授予ASPNET时它没有工作。

0

ASP服务器通常会限制脚本允许写入的文件夹。通常,ASP应用程序需要配置具有写入权限的专用文件夹。由于您正在为没有任何前导斜杠的MapPath()指定相对文件路径,因此它将返回与调用的.asp文件位于同一文件夹中的完整文件路径,该文件在脚本中可能不可写。

1

您可以尝试使用System.IO.Path.GetTempFileName方法。 “这会在磁盘上创建一个唯一命名的零字节临时文件,并返回该文件的完整路径。”它在系统临时目录中创建它,所以你不必担心清理等。

+0

有用。但临时目录不相对于Web应用程序根目录。这是不是由网络无法访问? – JonathanWolfson 2009-08-30 11:58:05

+0

不一定。 asp.net用户(通常是网络服务用户)可以访问授予权限的任何文件夹,但默认情况下这些权限取决于系统设置和信任级别。但我已经多次使用asp.net网站没有问题。 – 2009-08-31 14:46:51