Я работаю над приложением AngularJS.Модуль, над которым я сейчас работаю, должен иметь возможность показать предварительный просмотр файла электронной таблицы или разрешить его загрузку.
Шаги:
- При нажатии на «Файл предварительного просмотра»он должен отправить запрос с нужным именем файла в качестве параметра запроса POST.
- Backend найдет файл neede, который представляет собой файл .csv, преобразует его в тип байтового массива и отправляет его во внешний интерфейс.
- Интерфейс должен обработать этот байтовый массив и преобразовать его в .xls или .xlsx filetype
- Данные электронной таблицы должны быть открыты в небольшом окне предварительного просмотра, доступном только для чтения, например 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 говорят о том, что ниже библиотека преобразует проанализированный объект в поток узла.Так почему же происходит эта ошибка?