2011-11-29 142 views
-1

我想從服務器上下載文件,我得到訪問被拒絕的錯誤,路徑與我給的輸入不同,我怎麼能通過正確的路徑如何從服務器下載文件,使用asp.net網站

protected void Page_Load(object sender, EventArgs e) 
{ 
    string FileLoc = @"~/Upload/1984_Apple_Macintosh_Commercial.mp4"; 
    DownloadData(FileLoc); 
} 

public void DownloadData(string address) 
{ 
    var path = Path.Combine(Request.PhysicalApplicationPath, address); 
    using (var client = new WebClient()) 
    { 
     client.DownloadFile(path, "1984_Apple_Macintosh_Commercial.mp4"); 
    } 
} 

訪問路徑 'C:\ Program Files文件(x86)的\ Common Files文件\微軟 共享\ DevServer \ 10.0 \ 1984_Apple_Macintosh_Commercial.mp4' 被拒絕。

更新的代碼

protected void Page_Load(object sender, EventArgs e) 

{ 
    if (!IsPostBack) 
    { 
     string FileLoc = @"c:\Files\1984_Apple_Macintosh_Commercial.mp4"; 
     DownloadData(FileLoc); 
    } 
} 
public void DownloadData(string address) 
{ 
    var path = Path.Combine(Request.PhysicalApplicationPath, address); 
    WebClient Client = new WebClient(); 
    Client.DownloadFile(path, @"c:\Files\1984_Apple_Macintosh_Commercial.mp4"); 
} 
+0

Tilde擴展不是語言功能。您需要將其更改爲您的實際主目錄。 –

+1

@Chris不正確,請參閱http://msdn.microsoft.com/en-us/library/system.web.virtualpathutility.combine.aspx, 具體說明:'Combine方法使用AppDomainAppVirtualPath屬性值而非基本路徑,如果相對路徑以波浪號和斜線標記(〜/)開頭;否則,Combine方法使用基本路徑。「 – sinni800

+0

我站好了,謝謝@sinni800。 –

回答

0

client.DownloadFile()第二個參數表明,該文件被實際放置在錯誤中指定的文件夾內。我想你正在使用Windows 7,並且開發環境(Visual Studio?)不是以管理員權限啓動的,所以你不能保存在該文件夾中。

作爲第二個參數,請將路徑更改爲您不需要管理員權限的硬盤上的絕對路徑。

實施例:

client.DownloadFile(path, "c:\files\1984_Apple_Macintosh_Commercial.mp4")暗示c:\files存在。

+0

該進程無法訪問文件'C:Upload \ 1984_Apple_Macintosh_Commercial.mp4',因爲它正在被另一個進程使用。錯誤 – Mark

+0

@Mark您必須確保您只執行一次該頁面。如果正在執行兩次,則會發生錯誤。你想用這個文件做什麼?也許一個Path.GetTempFileName(不知道這是否是正確的名字!)會更好? – sinni800

+0

我創建了一個Files文件夾,並跟着你的代碼 – Mark

0

看起來你在這裏有些困惑。 WebClient用於從服務器下載文件。您好像在您的服務器端代碼中使用它來從同一臺服務器上「下載」一個文件;這沒有意義。

如果您想要編寫代碼以將文件從您的網站發送到客戶端(瀏覽器),可以通過不同的方式實現此目的。 Response.TransmitFile方法(比較here

相關問題