Восстановление BLOB-объекта Excel = поврежденный файл - PullRequest
1 голос
/ 21 марта 2019

Мой сервер передает мне файл .xls (заголовки ниже) с типом содержимого application/vnd.ms-excel

"cache-control": "public"
"content-type": "application/vnd.ms-excel"
"last-modified": "Thu, 21 Mar 2019 09:25:53 GMT"

Поэтому я создаю файл на своем клиенте с использованием техники BLOB-объектов, но данные внутриповсюду (файл открывается, но таблицы разбиты).

const file = new Blob([response.body], {type: "application/vnd.ms-excel"});
const href = URL.createObjectURL(file);

Я не могу найти решение, почему.

Несколько вещей, которые я пытался:

открыл файлна сервере, и это нормально, так что это подтверждает, что проблема при передаче или реконструкции большого двоичного объекта клиента

при передаче в виде base64 вместо двоичного: та же проблема, так что подтверждение проблемы на части восстановления большого двоичного объекта

полный javascript (двоичный)

export(context, type, callback) {
    context.$http.get(config.api_url + config.export_path + type,
        {responseType: 'application/vnd.ms-excel'}
        )
        .then((response) => {
            if (response.status === 200) {
                const file = new Blob([response.body], {type: "application/vnd.ms-excel"});
                const href = URL.createObjectURL(file);

                // success
                callback(context, 'success', href);
            } 
        })
        .catch(function (err) {
            console.log(err)
        })

},

полный javascript (base64)

exportBase64(context, type, callback) {
    context.$http.get(config.api_url + config.export_path + type
    )
    .then(response => response.json())
        .then((response) => {
            if (response.file) {

                const txt = atob(response.file);
                const file = new Blob([txt], { type: "application/vnd.ms-excel" });
                const href = URL.createObjectURL(file);

                // success
                callback(context, 'success', href);
            } else {
                // error
                callback(context, 'error');
            }
        })
        .catch(function (err) {
            console.log(err)
        })

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...