[英]File saving on HTML page using JavaScript
我正在嘗試開發SignalR
JavaScript
客戶端(純HTML
頁面,該頁面使用JavaScript從我的SignalR后端獲取實時更新),並且我在解決文件推送問題。
我要實現的目標:后端做了一些工作,並將結果保存到服務器上的* .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
參數是一個數組,等於C#
byte[]
數組,並且已發布zip文件保存,但是不幸的是,它是無效的。 當我使用Notepad++
打開它時,我看到了數組8513115 ...
難道我做錯了什么? 也許還有其他解決方案可以實現我的目標?
提前致謝!
從FireBug調試器更新屏幕截圖
嘗試像這樣使用Uinit8Array:
downloadResult: function (result, name) {
try {
var u8 = new Uint8Array(result.length);
for (var i=0; i < result.length; i++) u8[i] = result[i];
var blob = new Blob(u8, { type: 'application/octet-binary' });
saveAs(blob, name);
} catch (e) {
alert(e);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.