我使用此代碼返回FileContentResult與MSI文件,爲用戶在我ASP.NET MVC控制器下載:ASP.NET MVC:MSI文件可以通過FileContentResult返回而不破壞安裝包嗎?
using (StreamReader reader = new StreamReader(@"c:\WixTest.msi"))
{
Byte[] bytes = Encoding.ASCII.GetBytes(reader.ReadToEnd());
return File(bytes, "text/plain", "download.msi");
}
我可以下載文件,但是當我嘗試運行安裝程序,我得到一個錯誤消息說:
此安裝包不能打開 。聯繫應用程序供應商 以驗證這是一個有效的Windows 安裝程序包。
我知道問題不是C:\ WixTest.msi,因爲如果我使用本地副本,它運行得很好。我不認爲我使用了錯誤的MIME類型,因爲我可以通過使用File.Copy來獲得類似的結果,並通過FilePathResult(不使用StreamReader)返回複製的文件,該文件在下載後正常運行。
但是,我需要使用FileContentResult,以便我可以刪除我製作的文件的副本(一旦將它加載到內存中,我就可以執行該操作)。
我在想我通過複製或編碼文件使安裝包無效。有沒有辦法將MSI文件讀入內存,並通過FileContentResult返回它而不破壞安裝包?
解決方案:
using (FileStream stream = new FileStream(@"c:\WixTest.msi", FileMode.Open))
{
BinaryReader reader = new BinaryReader(stream);
Byte[] bytes = reader.ReadBytes(Convert.ToInt32(stream.Length));
return File(bytes, "application/msi", "download.msi");
}
這很好。謝謝! –