Отправка данных binairy через json из c # PhysicalFile приводит к потере кодировки символов - PullRequest
0 голосов
/ 31 октября 2018

У меня есть бинарный файл, который я хочу отправить через 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

становится

Я знаю, что это, вероятно, какая-то проблема с кодировкой, но я не знаю, как это исправить.

1 Ответ

0 голосов
/ 01 ноября 2018

Как отмечено в комментариях, AJAX JQuery, по-видимому, не имеет поддержки BLOB-объектов в качестве стандарта.

Но это позволяет вам изменить запрос XHR.

Эта ссылка здесь показывает более подробную информацию -> Использование метода jQuery ajax для получения изображений в виде BLOB-объектов

Вырезать и вставить немного для простоты.

jQuery.ajax({
  url:....,
  xhrFields:{
    responseType: 'blob'
  },
  ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...