Показать сообщение отдельно
  #5 (permalink)  
Старый 17.04.2020, 19:52
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Дело в том, выход из функции main происходит раньше, чем отработает загрузка файла. После этого происходит "отправка" формы. Так как action не указан, то просто происходит перезагрузка страницы.
Нужно ev.preventDefault() или return false в main.
У меня нет ИЕ сейчас, но вот так все работает до new ActiveXObject("Scripting.FileSystemObject");

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
<script>
function WriteFile(fileObj) {
  const filePath = "C:\\__WORK\\";
//  const fileName = "doc.txt";
 
  console.log("write file");
 
  var fso = new ActiveXObject("Scripting.FileSystemObject");
 
  var filename = filePath + fileObj.name;
 
  var FilePointer = fso.OpenTextFile(filename, 8, true);
 
  FilePointer.Write( fileObj.data );
  FilePointer.Close();
 
};
 
function send(filename, docid, keyname, storename) {
  var url = "http://127.0.0.1/test?"+
              "filename="+encodeURIComponent(filename);
  window.open(url, "_blank");
}
 
function main(ev) {
  var selectedFile = document.getElementById('inputfile').files[0];
  var writerFunc = WriteFile;
  var sendFunc   = send;
 
  ev.preventDefault()
  const reader = new FileReader();
 
  reader.onload = function() {
    var file = new Object();
    file.name = selectedFile.name;
    file.data = reader.result;
    writerFunc(file);
    sendFunc(file.name);
  };
  reader.readAsArrayBuffer(selectedFile);
 
};

document.addEventListener('DOMContentLoaded', () => {
	document.querySelector('form').addEventListener('submit', main)
})

</script>
</head>
<body>
    <form>
        <div><input type="file" id="inputfile"></div>
        <br/>
        <div>DocId: <input type="text" id="docid" size="100"></div>
        <br/>
        <div><input type="submit" value="Send"></div>
    </form>
    <div id="result"></div>
</body>
</html>
Ответить с цитированием