2012-02-13 92 views
3

我看了看周圍的互聯網3小時,現在尋找解決我的問題,我開始懷疑是否有其他人有過這個確切的問題?如何從我的網絡服務器下載文件到我的桌面?

我使用IIS7來託管一個網站,在我們的辦公室周圍做一些本地的事情。那麼,開發網站的一切工作正常,但現在我主持的網站我不能(也沒有其他人可以)點擊鏈接下載所需的文件。 (讓我們假裝他們點擊一個鏈接,從網絡服務器上下載一些隨機文件)

嗯,它無法下載文件,我可以猜測是一個權限錯誤。我尋找一個解決方案,但似乎無法找到一個。我對IIS7知之甚少,所以我不太瞭解應用程序池標識的內容,儘管我確實設法授予對該文件/文件夾的完全訪問權限。無論如何,這裏是它搞亂的具體區域..

這是一個default.cshtml頁面,從一個.cs文件調用一個函數: //好..很接近確切的東西,剛剛擺脫了一堆不必要的垃圾的

@{ 
string tmp = Functions.downloadFile(fileName) 
} 

<html> 
tmp 
</html> 

這是實際將該文件下載到桌面

public static string downloadFile(string fileName) //i know this example doesnt 
//use filename, but the original code does. 
{ 
    if (Directory.Exists("C:\WebSite\thingsToDownload")) 
    { 
     string[] files = Directory.GetFiles("C:\WebSite\thingsToDownload"); 

     foreach (string s in files) 
     { 
      string[] tmp = s.Split('\\'); 
      try 
      { 
       File.Copy(s, 
          Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
          + "\\" + tmp[tmp.Length - 1]); 
      } 
      catch (Exception e) 
      { 
       return "ERROR COPYING: " + e.Message; 
      } 
     } 
     return "GOOD"; 
    } 
    return "DIRECTORY DOESNT EXIST"; 
} 

之後是所有說的和做的cs文件的一部分,我得到「錯誤複製:訪問路徑'\ fileName'被拒絕

我的猜測是,網絡服務器無法訪問該用戶的桌面以便將文件放到那裏。 如果任何人可以擺脫一些光線,並幫助我得到這個,將不勝感激!

+0

你試圖寫入文件到服務器的桌面(或其他地方'fileName'可能指向除此以外)。使用[Response.WriteFile](http://msdn.microsoft.com/en-us/library/dyfzssz9.aspx)。 – 2012-02-13 19:34:45

+0

這段代碼是否應該允許用戶下載任何內容?似乎有一個文件正在服務器上的兩個文件夾之間複製。這個問題可能源自這樣一個事實,即Environment.GetFolderPath爲LocalSystem返回一個空路徑(或者你的池運行的任何用戶),但這並不能改變整個方法看起來不對的事實。 – 2012-02-13 19:36:31

回答

2

如果要通過單擊鏈接下載文件,則應使用響應。

這裏是您可以使用,例如一個樣本,當用戶點擊一個鏈接或按鈕或東西:

const string fName = @"C:\picture.bmp"; 
    FileInfo fi = new FileInfo(fName); 
    long sz = fi.Length; 

    Response.ClearContent(); 
    Response.ContentType = Path.GetExtension(fName); 
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename = {0}",System.IO.Path.GetFileName(fName))); 
    Response.AddHeader("Content-Length", sz.ToString("F0")); 
    Response.TransmitFile(fName); 
    Response.End(); 
+0

用戶正在點擊一個鏈接 - 服務器應該保存該文件。這不是說OP正在編寫一個應用程序來自動執行這些下載。 – 2012-02-13 19:38:47

+0

@ Mr.Disappointment - 我誤讀了這個問題......編輯... – TheBoyan 2012-02-13 19:43:46

+0

這個答案沒有錯。顯然它不會下載到桌面......因爲你無法做到這一點。但是它確實給出了足夠清晰的例子來說明如何下載「隨機」文件,並且應該讓OP開始解決他的問題。 – 2012-02-13 19:47:10

1

它在您開發它時起作用,因爲它在您的計算機上運行,​​因此可以訪問您的桌面上的。有沒有這樣的事情下載到桌面。您可以提供文件並讓用戶決定文件的保存位置;在桌面或其他地方。但是你必須通過http來做到這一點,而不是直接從服務器。

相關問題