@ZoxWatt

Как организовать прием и передачу файла, используя 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>
  • Вопрос задан
  • 1523 просмотра
Пригласить эксперта
Ответы на вопрос 1
@void01
отвечал на похожий вопрос тут
Почему ajax не обрабатывается?

чтобы файл скачивался просто добавь правильный Content-type
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы