我不知道這是可能的,你究竟是如何要求它。但是,我知道你可以用不同的方法做到這一點。也許它會爲你工作。
的想法是受保護的文件存儲,是不是可以從網絡(而不是虛擬目錄)的文件夾。然後,在處理用戶身份驗證和文件服務的控制器(如Controllers/DownloadController.cs
)上有一個方法。下面是可以從c:\myfiles
檢索文件的樣品的方法:
控制器/ DownloadController.cs(動作僅法):
[Authorize]
public FileResult Download(string filename)
{
//get content type from file extension
var contentType = getContentTypeFromExtension(filename);
//return file with filename as third argument to
// trigger browser's download bahavior
return File(Path.Combine(fileFolder, filename), contentType, filename);
}
[Authorize]
public FileResult Open(string filename)
{
//get content type from file extension
var contentType = getContentTypeFromExtension(filename);
//return file without download filename so that
// the file is opened in browser (if possible)
return File(Path.Combine(fileFolder, filename), contentType);
}
//method to get content type of file from registry using file extension
static string getContentTypeFromExtension (string fileName)
{
string contentType = "application/unknown";
string ext = System.IO.Path.GetExtension(fileName).ToLower();
Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
if (regKey != null && regKey.GetValue("Content Type") != null)
contentType = regKey.GetValue("Content Type").ToString();
return contentType;
}
fileFolder
變量應在類級別來定義。我把它拿出來,因爲它搞亂了代碼格式。 :)
有趣。我想避免使用處理程序,但這可能是我唯一的選擇。有一個問題,當返回的「文件」是圖像時,它是否會在瀏覽器中打開,就好像用戶點擊了圖像,或者是否開始下載圖像作爲下載內容一樣。我希望前者。謝謝。 – kmehta 2010-07-27 20:31:33
如果您希望它像下載一樣行事,只需將第三個參數添加到返回文件(...)行。我會更新代碼來舉例。 – 2010-07-27 20:36:54
謝謝!我會給這個鏡頭。 – kmehta 2010-07-27 20:42:35