Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过json从c物理文件发送二进制数据会导致字符编码丢失_Javascript_C#_Vue.js_Encoding_Character Encoding - Fatal编程技术网

Javascript 通过json从c物理文件发送二进制数据会导致字符编码丢失

Javascript 通过json从c物理文件发送二进制数据会导致字符编码丢失,javascript,c#,vue.js,encoding,character-encoding,Javascript,C#,Vue.js,Encoding,Character Encoding,我有一个二进制文件,我希望通过ajax调用发送回一个网站。为此,我有以下代码: [Microsoft.AspNetCore.Mvc.Route("api/BIM/GetModifiedRevitFile")] public ActionResult GetModifiedRevitFile(string json) { string tmppath = Path.GetTempPath(); var fileVirtualPath = tmppath + "result

我有一个二进制文件,我希望通过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();
},
现在,这段代码以基本正确的格式发送文件,但是有很多二进制字符,例如

ÐÏÏa”

变成

��ࡱ�


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

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

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

此链接显示更多详细信息->

为了简单起见,在这里剪切和粘贴一点

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

contentType:application/json,json不是二进制数据,隐式地是utf-8编码的。@Keith I试图将其更改为contentType:application/octet stream,但结果相同。而且接收到的数据似乎比应该发送的6mb小得多,这仅仅是编码使压缩更加高效吗?您想使用blob,但jquery似乎不直接支持它,但有一个XHR回调可以修补到,。。看看这里->@Keith谢谢这似乎很有效,你愿意把它作为一个答案写下来让我接受吗?