我有一个二进制文件,希望通过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();
},
现在,此代码以大多数正确的格式发送文件,但是有很多宾利字符,例如
ÐÏࡱá
成为
��ࡱ�
我知道这可能是某种编码问题,但是我不知道如何解决。
答案 0 :(得分:1)
正如评论中指出的那样,JQuery的ajax似乎没有标准的blob支持。
但是它确实允许您修改XHR请求。
此链接显示更多详细信息-> Using jQuery's ajax method to retrieve images as a blob
为简单起见,在此处剪切和粘贴少量内容。
jQuery.ajax({
url:....,
xhrFields:{
responseType: 'blob'
},
...
});