Как отправить проанализированный файл .csv в виде байтового массива или данных ArrayBuffer из серверной части Node.js во внешний интерфейс AngularJS? - PullRequest
0 голосов
/ 14 июня 2019

Я работаю над приложением AngularJS.Модуль, над которым я сейчас работаю, должен иметь возможность показать предварительный просмотр файла электронной таблицы или разрешить его загрузку.

Шаги:

  1. При нажатии на «Файл предварительного просмотра»он должен отправить запрос с нужным именем файла в качестве параметра запроса POST.
  2. Backend найдет файл neede, который представляет собой файл .csv, преобразует его в тип байтового массива и отправляет его во внешний интерфейс.
  3. Интерфейс должен обработать этот байтовый массив и преобразовать его в .xls или .xlsx filetype
  4. Данные электронной таблицы должны быть открыты в небольшом окне предварительного просмотра, доступном только для чтения, например 1000x1000 px.

Строка запроса POST выглядит следующим образом:

this.$http.post(this.url + 'endpoint/getFile', params, 
     {responseType: "arraybuffer", showLoadingOverlay: true}
)

Ответ действительно выглядит как ArrayBuffer: три из них в одном объекте, то есть Uint8Array, Uint16Array и Uint32Array.

Код, который долженпрочитайте это и преобразуйте в контент, подходящий для предварительного просмотра, не работает:

const byteArray = new Uint8Array(data);
const blob = new Blob([byteArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const objectUrl = URL.createObjectURL(blob);
this.$window.open(objectUrl, 'C-Sharpcorner', 'width=1000,height=1000');

Поскольку при создании большого двоичного объекта его длина в байтах уже равна 0, поэтому данные внутри отсутствуют.

Я думаю, что вопрос визуализации .xls в окне браузера можно решить с помощью библиотеки canvas-datagrid .Не использовал, но выглядит круто.

Кроме того, у меня есть проблема с попыткой установить фиктивные данные для node.js (и AngularMock), для локального тестирования, когда нет данных на Java-бэкэнде.

Я использую 'fs' и 'csv-parse':

const fs = require('fs');
const csvParse = require("csv-parse/lib/es5");

module.exports = function stir(app) {
    const getFile = () => {
        const csvOutput = csvParse('../static/someData.csv', (parsed) => {
            return parsed;
        });
        fs.readFileSync(csvOutput);
     };
     app.post('/stir/getFile', (req, res) => res.json(getFile()));
};

, что приводит к ошибке:

TypeError: путь должен быть строкойили Buffer

Каков правильный способ синтаксического анализа .csv с помощью 'csv-parse' и отправки проанализированных данных в виде ArrayBuffer для внешнего интерфейса в Node и AngularMock?Документы csv-parse говорят о том, что ниже библиотека преобразует проанализированный объект в поток узла.Так почему же происходит эта ошибка?

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