通过C#PhysicalFile通过JSON发送Binairy数据会导致字符编码丢失 - javascript

我有一个二进制文件,希望通过ajax调用将其发送回网站。为此,我有以下代码:

[Microsoft.AspNetCore.Mvc.Route("api/BIM/GetModifiedRevitFile")]    
public ActionResult GetModifiedRevitFile(string json)
{
    string tmppath = Path.GetTempPath();
     var fileVirtualPath = tmppath + "result.rvt";
    WorkItemHandler.ExecuteWorkItem(fileVirtualPath);
    var res= PhysicalFile(fileVirtualPath, "application/octet-stream", Path.GetFileName(fileVirtualPath));

        return res;

以及vue / javascript代码:

AskToStoreFile: function (file, self) {
    alert("asking stuff")
    alert(file.responseText);
    var saveByteArray = (function () {
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.style = "display: none";
        return function (data, name) {
            var blob = new Blob(data, { type: "octet/stream" }),
                url = window.URL.createObjectURL(blob);
            a.href = url;
            a.download = name;
            a.click();
            window.URL.revokeObjectURL(url);
        };
    }());

    saveByteArray([file.responseText], 'example.dat');
},

UploadLightsToServer: function() {
    var self = this;

    $.ajax({
        type: "GET",
        timeout: 12000000,
        url: 'api/BIM/GetModifiedRevitFile',
        contentType: "application/octet-stream"
        dataType: "application/octet-stream",
        success: function (data) {
            self.AskToStoreFile(data, self);
        },
        error: function (data) {
            self.AskToStoreFile(data,self)
            alert("failed to load data" + JSON.stringify(data));
        }
    });
},

StoreLightsInRevit: function() {
    alert("doing a revit");
    this.UploadLightsToServer();
},

现在,此代码以大多数正确的格式发送了文件,但是其中有很多二进制字符,例如

  ÐÏࡱá

变成

   ��ࡱ�

我知道这可能是某种编码问题,但我不知道如何解决。

参考方案

正如评论中指出的那样,JQuery的ajax似乎没有标准地支持blob。

但是它确实允许您修改XHR请求。

此链接显示更多详细信息-> Using jQuery's ajax method to retrieve images as a blob

为了简单起见,在此处剪切和粘贴一点。

jQuery.ajax({
  url:....,
  xhrFields:{
    responseType: 'blob'
  },
  ...
});

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

从控制器以视图(javascript)访问会话 - javascript

这是我的控制器代码。我想获取视图中存储在会话中的值(JavaScript代码) decimal.TryParse(permotion.PROMOTION_AMOUNT.ToString(), out promotionAmount); int.TryParse(permotion.PROMOTION_TYPE_ID.ToString(CultureInfo.…