2012-10-24 64 views
0

嗨,我需要編寫一個下載功能,以便當我的網站的用戶點擊一個按鈕時,該文件被下載到那裏的PC。將Web服務器上文件的下載功能寫入客戶端PC。

如果我用這個作爲一個鏈接,然後將文件下載:

http://formvalue.co.za/download/" + fileName + ".xlsx" 

但我不能以後做任何事情,所以我需要這樣的功能,這樣我可以將文件刪除掉我的服務器下載完成後的狀態。

我使用的是MVC,所以函數可以在Jquery或C#中。

任何人都可以請幫忙,如果您需要任何信息,請提前致謝。

+0

鏈接是否必須匹配確切格式?這會工作嗎? http://formvalue.co.za/download?file=whatever.xlsx – Nuzzolilo

+0

會怎樣?而不是/做? – Pomster

+0

什麼都不是自己的,這是一個直接的問題... – Nuzzolilo

回答

1

你可以簡單地使用一個LinkBut​​ton回發到服務器並調用以下方法嗎?

internal static void ContentToBrowser(string contentType, string filename, string content) 
     // Send to browser 
     var response = HttpContext.Current.Response; 
     response.Clear(); 
     response.ContentType = contentType; 
     response.AddHeader("Content-Disposition", 
        String.Format("attachment; filename=\"{0}\"", filename)); 
     var contentLength = response.ContentEncoding.GetByteCount(content); 
     response.AddHeader("Content-Length", contentLength.ToString()); 
     response.Write(content); 
     response.End(); 
} 

這可以讓你所需要的內容直接寫回客戶端,無需擔心存儲在服務器上。例如

protected void LinkButtonClick(object sender, EventArgs e) 
{ 
    string filename = @"c:\filepath\blah.xlsx"; 
    string content = File.ReadAllText(filename); 
    ContentToBrowser("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "downloaded-blah.xlsx", content); 
    File.Delete(filename); 
} 

但是,我不得不質疑你之後刪除文件的動機。你怎麼知道它已被客戶端成功下載和存儲?

+0

但該文件在我的服務器上,我想下載到客戶端,我不確定這段代碼做了什麼? – Pomster

+0

上面的代碼會將文件的內容直接寫回給客戶端,並指定文件名和contentType。如果該文件位於服務器上,則可以讀取該文件,然後使用此方法將其返回給客戶端,然後將其刪除。 – CalC

+0

那麼內容類型和內容是什麼? – Pomster

相關問題