Javascript 通过json从c物理文件发送二进制数据会导致字符编码丢失
我有一个二进制文件,我希望通过ajax调用发送回一个网站。为此,我有以下代码: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
[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谢谢这似乎很有效,你愿意把它作为一个答案写下来让我接受吗?