4

我使用此代碼返回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"); 
} 

回答

3

嘗試使用二進制編碼和內容類型application/msi代替text/plain - 所以你重整文件它不是ASCII或文本內容。

+0

這很好。謝謝! –

相關問題