Использовать файл xlsx, загруженный клиентом (Leaflet) - PullRequest
0 голосов
/ 19 декабря 2018

Моя цель - из файла xlsx, который загружает клиента, представить переменные с помощью Leaflet.

Когда я даю абсолютный путь к примеру, который у меня есть на моем сервере, все в порядке, проблема возникает, когдаЯ пытаюсь передать файл из <input type = "file">.

Из того, что я смог прочитать в других вопросах, по соображениям безопасности создается «поддельный путь», но это означает, что я не могу получить доступ к файлу, которыйклиент оставляет на входе.

Я новичок в программировании, и я довольно потерян с точки зрения безопасности и всего этого.Если бы у кого-то было решение, я был бы очень признателен.

HTML

<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />

JS

/* DATA --- Read xlsx file (foreign code - PLUGIN xlsx.full.min.js ) */
function readXlsxFile(url, sheet, cb) {
  var oReq = new XMLHttpRequest();
  oReq.open("GET", url, true);
  oReq.responseType = "arraybuffer";
  oReq.onerror = function() {
    cb(new Error("Could not load file " + url));
  }
  oReq.onload = function() {
    var arraybuffer = oReq.response;
    // Convertir datos a binario
    var data = new Uint8Array(arraybuffer);
    var arr = new Array();
    for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
    var bstr = arr.join("");

    var workbook = XLSX.read(bstr, { type: "binary" });
    var sheetName = workbook.SheetNames[sheet];
    var worksheet = workbook.Sheets[sheetName];
    var result = XLSX.utils.sheet_to_json(worksheet, { raw: true });
    cb(null, result);
  }
  oReq.send();
};


function readXlsxFileSheet(url, cb) {
  const rateFile = serializeMapFormValues().rate
  if (rateFile === "travelers" || rateFile === "travelersPoblation" || rateFile === "travelersForeignPercent" || rateFile === "travelersNatPercent") {
    readXlsxFile(url, 0, cb);
  } else if (rateFile === "ruralTravelers" || rateFile === "ruralForeignPercent" || rateFile === "ruralPercent" || rateFile === "ruralNatPercent") {
    readXlsxFile(url, 1, cb);
  } else if (rateFile === "apartTravelers" || rateFile === "apartPoblation" || rateFile === "apartForeignPercent" || rateFile === "apartNatPercent") {
    readXlsxFile(url, 2, cb);
  } else if (rateFile === "hotelTravelers" || rateFile === "hotelForeignPercent" || rateFile === "hotelNatPercent") {
    readXlsxFile(url, 3, cb);
  } else {
    console.log("Lost variable for sheet");
  }
};
const submitButton = document.querySelector("input[type=submit]");
submitButton.addEventListener("click", function(ev) {
  ev.preventDefault();
  //Catch path and variable from the HTML form
  let fileUrl = serializeMapFormValues().url;
  let fileRow = serializeMapFormValues().rate;

  // Update map data
  readXlsxFileSheet(fileUrl, function(error, data) {
    // code
  });
});

Если я изменю fileUrl ("C:\fakepath\turismo_ejemplo_resuelto.xlsx") на "files/turismo_ejemplo_resuelto.xlsx" всев порядке.

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