2009-08-27 56 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