簡體   English   中英

使用JavaScript在HTML頁面上保存文件

[英]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);
            }
        }

我發現, SignalRbyte[]轉換為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調試器更新屏幕截圖

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM