Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2016, 12:38   #1
ZoxWatt
Пользователь
 
Регистрация: 15.02.2012
Сообщений: 17
По умолчанию Как организовать прием и передачу файла, используя Express/XMLHttpRequest?

Необходимо реализовать следующую вещь: пользователь на клиенте(браузере) передает по POST запросу серверу(Node.js) некие данные через textarea, сервер их обрабатывает, создает файл с неким логом(текстовый файл), который пользователь потом может скачать. Данные передаются, файл создается, а вот организовать процесс скачивания файла у меня не удается.
server.js:
Код:
var fs = require("fs");
var express = require("express");
var bodyParser = require("body-parser");
var app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.get('/',function(req,res){
  res.sendfile("index.html");
});
app.post('/url',function(req,res){
  var inputdata=req.body.input;
  console.log("inputdata = "+inputdata+", outputdata = "+test(inputdata));
  res.send(test(inputdata));
    createFile(inputdata);
});

app.listen(3000,function(){
  console.log("Started on PORT 3000");
})

function test(s){
  return s.charAt(0);
}

function createFile(s){
    fs.writeFile("test.txt",test(s),function(err){
        if (err)
            throw err;
        console.log("The file was created.");
    });
}
index.html
Код:
<!DOCTYPE HTML>
<html>

<head>
  <meta charset="utf-8">
  <script src="js/jquery-3.1.0.min.js" type="text/javascript"></script>
  <script src="js/bootstrap.min.js" type="text/javascript"></script>
</head>

<body>
  <form id="testForm">
    <textarea class="input" cols="20" id="input" name="input" rows="2"></textarea>
    <textarea class="output" cols="20" id="output" name="output" rows="2"></textarea>
    <button onclick="send()" id="button">Send</button>
  </form>
  <script>
        function send(){
            var form = document.getElementById('testForm');
            form.onsubmit = function (e) {
                e.preventDefault();
                var data = {};
                for (var i = 0, ii = form.length; i < ii; ++i) {
                    var input = form[i];
                    if (input.name=="input") {
                        data[input.name] = input.value;
                    }
                }
                var xhr = new XMLHttpRequest();
                xhr.open('POST', 'url', true);
                xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
                xhr.onreadystatechange = function() {
                    if (xhr.readyState != 4) return;
                    if (xhr.status != 200) {
                        alert(xhr.status + ': ' + xhr.statusText);
                    } else {
                        console.log(xhr.response);
                        document.getElementById('output').value=xhr.responseText;
                    }
                }
                xhr.send(JSON.stringify(data));
            }
        }
  </script>

</body>

</html>
if (p==3) p=3;
else p=3;
ZoxWatt вне форума Ответить с цитированием
Старый 30.09.2016, 13:19   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Ну создаешь сессию, получаешь файл, который привязываешь к сессии (на случай падения серванта), дальше выдаешь файл только по сессии...
со стороны сервака...
с клиента: получешьй файл, отправляешь лонгпулл (не, ну можешь конечно и соккет замутить, никто не мешает, но еслиб ты мог, то уже бы догадался до лонгпула минимум).
Отдаешь файл.
PROFFIT!!
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с wcf наладить передачу файла на сервер, не могу ошибку найти androk C# (си шарп) 1 04.05.2012 10:27
Как организовать передачу данных? mixa_go Общие вопросы .NET 0 12.10.2011 10:21
Как организовать передачу файла в несколько секций... ikot Работа с сетью в Delphi 1 31.05.2009 09:04
Как организовать прием и работу кладра tarakan1983 БД в Delphi 10 12.03.2009 18:30
Как осуществить передачу и прием пакета c клиента на сервер? IIpopoK Работа с сетью в Delphi 6 07.12.2008 14:10