我正在嘗試開發SignalR
JavaScript
客戶端(使用JavaScript從我的SignalR後端獲取實時更新),並且我正在努力解決文件推送問題。使用JavaScript在HTML頁面上保存文件
我想要實現: 後端做了一些工作,並保存結果到服務器上的* .zip文件,推動該文件的客戶端,HTML
頁面提供運營商保存文件。下面有一個C#
後端代碼用於壓縮和壓縮。
private void CreateZip()
{
if (SdkHub.RR.XMLResults && SdkHub.RR.SaveImages)
{
using (var zip = new ZipFile())
{
var mstream = new MemoryStream();
mstream.Seek(0, SeekOrigin.Begin);
zip.AddDirectory(mydir);
zip.Save(mstream);
mstream.Position = 0;
Clients.All.downloadResult(mstream.ToArray(), myName+".zip");
}
}
}
我花了一些時間來研究「保存文件使用JavaScript」,並找到了解決辦法FileSaver.js,它允許保存生成的文件。我JavaScript
代碼:
downloadResult: function (result, name) {
try {
var blob = new Blob(result, { type: "application/zip" });
saveAs(blob, name);
} catch (e) {
alert(e);
}
}
我已經想通了,我SignalR
轉換byte[]
到base64 string
,所以我做了一個小更新,我C#
:
var intArray = mstream.ToArray().Select(b => (int)b).ToArray();
Clients.All.downloadResult(intArray, myName+".zip");
調試時,我明白了,在JavaScript
中收到的result
參數是一個數組,等於byte[]
數組在C#
,併發出zip文件保存,但不幸的是,它是無效的。當我打開它使用Notepad++
,我看到我的陣列8513115 ...
我做錯了什麼?也許有其他解決方案來實現我的目標?
提前致謝!
更新截圖來自FireBug調試
你可以嘗試使用類型構建斑點: '應用程序/八位字節的二進制' – closure
對不起不提這個,但我已經試過了。 –
也讓我知道使用調試器result.constructor的價值 – closure